AWS RDS - 更改默认权限解决方法

问题描述 投票:0回答:1

我正在尝试以主用户身份针对 AWS RDS 集群运行以下形式的命令:

ALTER DEFAULT PRIVILEGES FOR ROLE "foo_role"
  IN SCHEMA "bar"
  GRANT SELECT ON TABLES TO "foo-reader";

但是,

rds_superuser
角色不允许这样做:

ERROR:  must be member of role "foo_role"

AWS 发布了

rds_superuser
角色可以运行的命令列表此处

CREATE ROLE, CREATE DB, PASSWORD VALID UNTIL INFINITY, CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION, CREATE TABLESPACE, ALTER <OBJECT> OWNER, CHECKPOINT, PG_CANCEL_BACKEND(), PG_TERMINATE_BACKEND(), SELECT PG_STAT_REPLICATION, EXECUTE PG_STAT_STATEMENTS_RESET(), OWN POSTGRES_FDW_HANDLER(), OWN POSTGRES_FDW_VALIDATOR(), OWN POSTGRES_FDW, EXECUTE PG_BUFFERCACHE_PAGES(), SELECT PG_BUFFERCACHE

是否可以仅使用

rds_superuser
提供的内容来运行等效命令,理想情况下无需将
foo_role
分配给主用户?

postgresql amazon-web-services permissions amazon-rds
1个回答
0
投票

PostgreSQL 文档表明

ALTER DEFAULT PRIVILEGES
只能由会话用户使用,它没有提到超级用户可以将它用于其他用户:

您只能更改由您自己或您所属的角色创建的对象的默认权限。

https://www.postgresql.org/docs/current/sql-alterdefaultprivileges.html

这是违反直觉的。

superuser
角色表明它应该能够执行数据库中的所有操作。

因此,超级用户属于每个用户组并没有错。毕竟,超级用户几乎可以做其他用户可以做的所有事情,

ALTER DEFAULT PRIVILEGES
是一个例外。

GRANT role_name1 TO rds_superuser;
ALTER DEFAULT PRIVILEGES FOR ROLE role_name1
  IN SCHEMA schema_name
  GRANT SELECT ON TABLES TO role_name2;

https://www.postgresql.org/docs/current/sql-grant.html

如果出于某种原因超级用户不应该成为该角色的成员,那么之后可以将其删除:

REVOKE role_name1 FROM rds_superuser;

https://www.postgresql.org/docs/current/sql-revoke.html

或者,如果不将该角色分配给超级用户,则可以在以超级用户身份登录时更改会话用户:

SET ROLE role_name1
ALTER DEFAULT PRIVILEGES FOR ROLE role_name1
  IN SCHEMA schema_name
  GRANT SELECT ON TABLES TO role_name2;
RESET ROLE

根据文档,超级用户可以使用

SET ROLE
更改为任何其他角色:

指定的

role_name
必须是当前会话用户的角色 是 的成员。如果会话用户是超级用户,则可以是任何角色 已选择。

https://www.postgresql.org/docs/current/sql-set-role.html

毕竟,超级用户可以为任何角色执行

ALTER DEFAULT PRIVILEGES
。只是有点麻烦,必须先更改会话角色,然后再重新设置。

© www.soinside.com 2019 - 2024. All rights reserved.