2014-03-27 51 views
19

我正在运行PostgreSQL 9.3.1。我有用于备份数据库的test数据库和backup用户。我对授予所有当前表的权限没有任何问题,但每次将新表添加到模式时都必须授予权限。授予PostgreSQL未来表格的特权?

createdb test 

psql test 
test=# create table foo(); 
CREATE TABLE 
test=# grant all on all tables in schema public to backup; 
GRANT 
test=# create table bar(); 
CREATE TABLE 

psql -U backup test 
test=> select * from foo; 
test=> select * from bar; 
ERROR: permission denied for relation bar 

是否有可能授予对将来创建的表的访问权限,而无需让表的用户拥有者?

回答

16

它看起来像解决方案是改变了backup用户默认权限:

alter default privileges in schema public grant all on tables to backup; 
alter default privileges in schema public grant all on sequences to backup; 
+0

相关文章:http://www.postgresql.org/docs/9.0/static/sql-alterdefaultprivileges.html – aaaaaa

+7

作为警告,默认只适用于执行alter语句的用户。 这让我感到困惑,因为我从postgres用户驱动大部分权限声明,但是却从应用程序用户创建表。 总之,根据您的设置,您可能需要这样的东西: '更改用户默认权限webapp IN SCHEMA public GRANT SELECT ON SEQUENCES TO备份; 更改用户默认权限webapp IN SCHEMA公共授予选择表格备份;' –

+1

这让我很难理解如何记录alter default权限的限制。我是否正确,如果备份不是拥有该表的角色的成员,则此答案实际上不起作用?当我的备份用户不是拥有者或超级用户,并且没有其他权限时,我尝试“在要备份的表上修改架构公共授权SELECT中的默认权限”时,它不适用于我。 – danny