PostgreSQL - 为什么特权用户无法访问新创建的分区



为什么特权用户不能访问新创建的分区?

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语句。

最新更新