如何为数据库中的所有表授予某些权限?

时间:2011-09-03 14:32:11

标签: database postgresql permissions

我需要在postgresql 8.4中使用与mysql的GRANT SELECT ON db.* TO user类似的东西。我在网上找到的解决方案使用for循环一次选择表并为它们授予权限。但这意味着每次将新表添加到数据库时我都必须重新运行该命令。

对此有更直接的解决方案吗?

3 个答案:

答案 0 :(得分:8)

假设您没有定义任何特定模式,那么您的所有表都将位于“公共”模式中,因此您可以说:

GRANT <permissions> ON ALL TABLES IN SCHEMA public TO <roles>;

这仅适用于9.0或以上,所以你在8.4中运气不好。

另请参阅:http://www.postgresql.org/docs/8.4/static/ddl-schemas.html

答案 1 :(得分:3)

请注意,通常将某个用户的权利授予其他用户会产生更多或更多意义,并且更容易跟踪。

create user dbuser9;
create database test9 with owner dbuser9;
\c test9 dbuser9
create a bunch of stuff...
\c postgres postgres
grant dbuser9 to stan;

答案 2 :(得分:2)

Default privileges附带版本9.0,旧版本不提供。

您可以创建一个循环遍历所有表的存储过程并设置权限。