对特定模式具有不同权限的 Postgresql 2 用户
Postgresql 2 users with different permissions on a specific schema
我有一个带有 public 模式的 postgresql 11 数据库。我有一个角色 user1,它拥有架构 public.
的所有权限
我想做以下事情:
- 创建架构“some_schema”;
- 授予用户 1 对“some_schema”的只读权限;
- 创建对模式“some_schema”具有所有权限的角色 user2。
我尝试了以下方法:
CREATE USER user2 WITH PASSWORD '***';
CREATE schema "some_schema";
GRANT CONNECT ON DATABASE user1 TO some_schema;
GRANT USAGE ON SCHEMA some_schema TO user1;
GRANT ALL ON SCHEMA some_schema to user2;
ALTER DEFAULT PRIVILEGES IN SCHEMA some_schema GRANT SELECT ON TABLES TO user1;
这不起作用,因为当我这样登录然后我创建了一个“测试”table 和 select,它使用户 1 认为“关系 'some_schema.test' 没有存在”:
创建tablesome_shema.test(id int);
\q
psql -U user1;
select * 来自 some_schema.test;
结果 => 关系 some_schema.test 不存在。
我还更改了 pg_hba.conf 以允许两个用户访问新架构并重新启动服务器。
我试图阅读文档和许多东西但没有成功。也许这是我连接到数据库的方式?
谢谢。
谢谢@JGH,就是这样。 : 用户 2 必须让自己访问用户 1 到架构 some_shema。
我做了什么:
psql
CREATE USER user2 WITH PASSWORD '***';
\c my_database
CREATE SCHEMA some_schema AUTHORIZATION user2;
\c my_database user2
create table some_schema.test(id int);
insert into some_schema.t(100);
GRANT USAGE ON SCHEMA some_schema TO user1;
GRANT SELECT ON ALL TABLES IN SCHEMA some_schema TO user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA some_schema GRANT SELECT ON TABLES TO user1;
然后 :
\c my_database user1
select * from some_schema.t;
=> 显示结果 100 :)
我有一个带有 public 模式的 postgresql 11 数据库。我有一个角色 user1,它拥有架构 public.
的所有权限我想做以下事情:
- 创建架构“some_schema”;
- 授予用户 1 对“some_schema”的只读权限;
- 创建对模式“some_schema”具有所有权限的角色 user2。
我尝试了以下方法:
CREATE USER user2 WITH PASSWORD '***';
CREATE schema "some_schema";
GRANT CONNECT ON DATABASE user1 TO some_schema;
GRANT USAGE ON SCHEMA some_schema TO user1;
GRANT ALL ON SCHEMA some_schema to user2;
ALTER DEFAULT PRIVILEGES IN SCHEMA some_schema GRANT SELECT ON TABLES TO user1;
这不起作用,因为当我这样登录然后我创建了一个“测试”table 和 select,它使用户 1 认为“关系 'some_schema.test' 没有存在”:
创建tablesome_shema.test(id int); \q
psql -U user1; select * 来自 some_schema.test;
结果 => 关系 some_schema.test 不存在。
我还更改了 pg_hba.conf 以允许两个用户访问新架构并重新启动服务器。 我试图阅读文档和许多东西但没有成功。也许这是我连接到数据库的方式?
谢谢。
谢谢@JGH,就是这样。 : 用户 2 必须让自己访问用户 1 到架构 some_shema。 我做了什么:
psql
CREATE USER user2 WITH PASSWORD '***';
\c my_database
CREATE SCHEMA some_schema AUTHORIZATION user2;
\c my_database user2
create table some_schema.test(id int);
insert into some_schema.t(100);
GRANT USAGE ON SCHEMA some_schema TO user1;
GRANT SELECT ON ALL TABLES IN SCHEMA some_schema TO user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA some_schema GRANT SELECT ON TABLES TO user1;
然后 :
\c my_database user1
select * from some_schema.t;
=> 显示结果 100 :)