我正在运行PostgreSQL 9.3.1。我有test
数据库和backup
用户,用于备份数据库。我对所有当前表授予特权没有问题,但每次将新表添加到模式时,我都必须授予特权。
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
字符串
是否有可能授予对将来将创建的表的访问权限,而不使用户成为表的所有者?
3条答案
按热度按时间vmdwslir1#
看起来解决方案是改变
backup
用户的默认权限:字符串
Matt Schaffer的评论:
需要注意的是,默认值仅适用于执行
alter
语句的用户。这让我很困惑,因为我是从postgres用户驱动我的大部分权限语句,但从应用程序用户创建表。简而言之,你可能需要这样的东西,这取决于你的设置:型
其中
webapp
是将来将创建新表的用户,backup
是能够从webapp
创建的新表中读取的用户。bvjxkvbb2#
如果您希望backup用户能够访问用户N的future表,则必须在每个创建新表的用户N下运行以下代码,因为ALTER DEFAULT PRIVILEGES.
字符串
slsn1g293#
我试图创建一个角色,授予连接访问该角色,然后更改默认权限以保持对未来对象的访问。然而,下面的命令似乎在角色级别不起作用。alter default privileges in schema public grant all on tables to backup;
我按照下面的文档,但似乎有两个命令不工作的角色。DOC:https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/第一个命令:GRANT USCEECT ON DATABASE mydatabase TO readonly;第二个命令:GRANT USAGE ON SCHEMA myschema TO readonly;(对于ROLES通常需要TO ROLE,我也尝试TO ROLE,但仍然不工作。