为什么特权用户不能访问新创建的分区?
PostgreSQL版本:10.0
假设我的PostgreSQL服务器有一个名为app
的用户,具有以下权限:
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO app;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public to app;
现在,这个用户app
可以像我所期望的那样为"现有"表/分区(例如:mytable_partition_old
(执行选择、插入和更新操作,到目前为止一切都很顺利。
但是,master
帐户在上面的GRANT
命令之后通过以下操作创建表的新分区:
CREATE TABLE IF NOT EXISTS "mytable_partition_new" PARTITION OF mytable FOR VALUES IN('some_value');
在创建了mytable_partition_new
之后,用户app
通过执行INSERT INTO mytable_partition_new values (...)
命令获得了"拒绝该关系的权限"。
我知道问题GRANT SELECT, .... TO app
可以再次解决。我的问题是,是否有更好的方法来实现它?
(我们没有专门的DBA,在这种情况下陷入了一段时间。(
您显示的GRANT仅授予现有对象的权限。要授予"未来"对象权限,您需要更改默认权限:
alter default privileges in schema public
for role master
GRANT SELECT, INSERT, UPDATE ON TABLES TO app;
alter default privileges in schema public
for role master
GRANT USAGE ON SEQUENCES TO app;
以上内容只会影响未来的对象,因此对于您已经创建的表(或分区(,您需要再次重新运行原始GRANT语句。