在PostgreSQL中授予对未来表的权限?

mwyxok5s  于 5个月前  发布在  PostgreSQL
关注(0)|答案(3)|浏览(95)

我正在运行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

字符串
是否有可能授予对将来将创建的表的访问权限,而不使用户成为表的所有者?

vmdwslir

vmdwslir1#

看起来解决方案是改变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;

字符串
Matt Schaffer的评论:
需要注意的是,默认值仅适用于执行alter语句的用户。这让我很困惑,因为我是从postgres用户驱动我的大部分权限语句,但从应用程序用户创建表。简而言之,你可能需要这样的东西,这取决于你的设置:

ALTER DEFAULT PRIVILEGES FOR USER webapp IN SCHEMA public GRANT SELECT ON SEQUENCES TO backup;
ALTER DEFAULT PRIVILEGES FOR USER webapp IN SCHEMA public GRANT SELECT ON TABLES TO backup;


其中webapp是将来将创建新表的用户,backup是能够从webapp创建的新表中读取的用户。

bvjxkvbb

bvjxkvbb2#

如果您希望backup用户能够访问用户Nfuture表,则必须在每个创建新表的用户N下运行以下代码,因为ALTER DEFAULT PRIVILEGES.

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO backup;

字符串

slsn1g29

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,但仍然不工作。

相关问题