我们正在使用 postgres 用户的远程连接在 AWS 上的 RDS 中设置 PostgreSQL 数据库。
数据库中有一个iam_ops
具有ops
角色的用户。如果在同一个 AWS 账户中使用它来将默认表权限设置为另一个规则readwrite
,这是可能的。
之后,如果以后ops
角色创建新表,iam_app_user
角色readwrite
可以使用它。
但是我们想通过 postgres 用户从远程服务器运行所有这些设置。由于该iam_ops
角色是由来自 RDS 的 IAM 身份验证使用的,因此似乎 postgres 用户无法像iam_ops
可以执行的那样执行授权任务。
CREATE USER iam_ops WITH LOGIN;
CREATE USER iam_app_user WITH LOGIN;
CREATE ROLE ops;
CREATE ROLE readwrite;
GRANT rds_iam TO iam_ops;
GRANT ops TO iam_ops;
GRANT readwrite TO iam_app_user;
GRANT rds_iam TO iam_app_user;
-- create and use a db
CREATE SCHEMA main;
GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON ALL TABLES IN SCHEMA main TO ops;
GRANT CREATE, USAGE ON SCHEMA main TO ops;
GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON ALL TABLES IN SCHEMA main TO readwrite;
GRANT USAGE ON SCHEMA main TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA main GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON TABLES TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA main FOR ROLE ops GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON TABLES TO readwrite;
我认为 postgres 用户可以做任何事情。在这种情况下它有一些限制真的是事实吗?
当前角色
postgres=> \du
Role List
Role | Attribute | Group
----------------------+--------------------------------------------------------------------------+-------------------------------------------------------------
iam_app_user | | {rds_iam,readwrite}
iam_ops | | {rds_iam,ops}
ops | Can't login | {}
postgres | Can create role, database +| {rds_superuser}
rds_iam | Can't login | {}
rds_superuser | Can't login | {pg_monitor,pg_signal_backend,rds_replication,rds_password}
“postgres”这个名字没有固有的特殊权力。将您最强大的用户命名为该名称是常见的(通常是自托管环境的默认设置),但不是强制性的。如果您选择了其他名称,那么您必须使用其他名称。