当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL 8.4将所有表的DML权限授予角色

如何解决《PostgreSQL8.4将所有表的DML权限授予角色》经验,为你挑选了1个好方法。

如何在PostgreSQL 8.4中的模式中的所有表上授予DML(SELECT,INSERT,UPDATE,DELETE)?我也希望这笔赠款能够在将来继续创建新的表格.

我已经看过9.0的解决方案,但我坚持使用8.4,因为它随Debian稳定运行.

我已经尝试了以下作为基线,但它不起作用,导致不可避免的"访问关系X被拒绝":

GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

我已经通过文档挖掘了,我似乎无法找到合适的解决方案.



1> A.H...:

我也希望这笔赠款能够在将来继续创建新的表格.[...]我已经通过文档挖掘了我似乎无法找到合适的解决方案.

因为在9.0之前没有.您只需设置现有表的权限即可.你必须GRANT为每个表做一个,因为在9.0之前没有"批量"模式.请参阅8.4和9.0的SQL语法:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] tablename [, ...]
    TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]

和9.0这里:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

ALL TABLES IN SCHEMA部分是您缺少的部分.

另外:在你问题中设置数据库级别的权限对你没有帮助:你将"只"设置数据库的权限,而不是任何"包含"的东西,如表.相关部分:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE dbname [, ...]
    TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]

这意味着你可以只设置CREATE,CONNECT以及TEMP对数据库本身的权限,但没有SELECT,INSERT等等.


到目前为止,对于坏事.你能做的是以下几点:

通过向用户授予权限而不向角色授予权限,减少权限管理的数量.然后向各个用户添加角色.创建新表时,您只需要调整一个或两个角色,而不是数百个用户.

查询系统目录并创建适当的GRANT命令.将它们保存到文件中并执行该文件.这应该可以让您更轻松地启动.

这样的查询可能如下所示:

select 'GRANT ALL ON ' || table_schema || '.' || table_name ||' to my_group;' 
from information_schema.tables 
where 
    table_type = 'BASE TABLE' and 
    table_schema not in ('pg_catalog', 'information_schema');

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有