【发布时间】:2011-09-03 14:32:10
【问题描述】:
我需要类似于 mysql 在 postgresql 8.4 中的 GRANT SELECT ON db.* TO user 的东西。我在网上找到的解决方案使用 for 循环一次选择表并授予它们的权限。但这意味着每次将新表添加到数据库时,我都必须重新运行该命令。
有没有更直接的解决方案?
【问题讨论】:
标签: database postgresql permissions
我需要类似于 mysql 在 postgresql 8.4 中的 GRANT SELECT ON db.* TO user 的东西。我在网上找到的解决方案使用 for 循环一次选择表并授予它们的权限。但这意味着每次将新表添加到数据库时,我都必须重新运行该命令。
有没有更直接的解决方案?
【问题讨论】:
标签: database postgresql permissions
假设您没有定义任何特定架构,那么您的所有表都将位于“公共”架构中,因此您可以说:
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
【讨论】:
public 架构中所有表的权限,这不太可能是意图......
请注意,通常将某个用户的权限授予另一个用户同样或更有意义,并且更容易跟踪。
create user dbuser9;
create database test9 with owner dbuser9;
\c test9 dbuser9
create a bunch of stuff...
\c postgres postgres
grant dbuser9 to stan;
【讨论】:
Default privileges 附带 9.0 版,旧版本中不可用。
您可以创建一个循环遍历所有表并设置权限的存储过程。
【讨论】: