sko*_*mar 9 postgresql permissions
我对 ALTER DEFAULT PRIVILEGES 有问题。我授予权限:
ALTER DEFAULT PRIVILEGES
FOR USER user_name
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO user_name;
Run Code Online (Sandbox Code Playgroud)
在下一步我创建一个表
create table schema_name.a (q int);
Run Code Online (Sandbox Code Playgroud)
现在,我使用 conn_user 连接到 dabasabe 并尝试读取新表中的数据。
select * from schema_name.a
Run Code Online (Sandbox Code Playgroud)
我收到错误:
SQL Error [42501]: ERROR: permission denied for relation a
org.postgresql.util.PSQLException: ERROR: permission denied for relation a
Run Code Online (Sandbox Code Playgroud)
您知道为什么会出现错误吗?
这里的问题是ALTER DEFAULT PRIVILEGES您发出的语句仅适用于由user_name以下人员创建的表:
您只能更改将由您自己或您所属的角色创建的对象的默认权限。
和
目标角色
当前角色是其成员的现有角色的名称。如果省略 FOR ROLE,则假定当前角色。
所以在你的情况下,你要么使用
ALTER DEFAULT PRIVILEGES
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO user_name;
Run Code Online (Sandbox Code Playgroud)
(没有FOR USER子句),或创建表user_name(在这种情况下,他们将成为所有者,因此无需授予任何权利)。
在任何情况下,始终以给定用户的身份创建 DB 对象是一个好习惯,这样访问权限是可预测的。
小智 6
要授予默认权限,您实际上需要向您创建表的用户授予权限。
例如:您以 SA_user 的身份创建表,但读取的表也是 READ_user。你的代码需要看起来像:
ALTER DEFAULT PRIVILEGES
FOR USER SA_user
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO READ_user;
Run Code Online (Sandbox Code Playgroud)
因此,每当 SA_user 创建表时,它都会为 READ_user 授予选择权限。
| 归档时间: |
|
| 查看次数: |
4745 次 |
| 最近记录: |