在 PostgreSQL 中,角色包含用户和组的概念。
CREATE USER 和 CREATE GROUP 语句实际上是 CREATE ROLE 语句的别名。不同之处在于用户是具有LOGIN
权限的角色。
角色是在 PostgreSQL 集群级别定义的,并且在集群内的所有数据库中都有效。角色不是针对单个数据库创建的。
在 pgAdmin 中,展开 PostgreSQL下的Login/Group Roles
:
红框里的是LOGIN
权限的role。如果该角色具有LOIGN
权限,则将其绘制为用户(例如 rdsadmin 和 masteruser)
右键创建一个新的Login/Group Role
:
为角色命名first_role
:
预览SQL,然后创建:
右键first_database
,选择Query Tool
:
执行以下SQL,以授予一些权限到刚才创建的新角色:
# 授予该角色从表中进行 SELECT 的能力,以及使用包含该表的schema的能力。
GRANT USAGE ON SCHEMA first_schema TO first_role;
GRANT SELECT ON first_schema.first_table TO first_role;
右键再创建一个Login/Group Role
:
为角色命名first_user
:
进入Definition
,输入密码:
进入Privileges
,设置Can login
:
进入Membership
,点击+
,并选择first_role
作为User/Role
:
最后,预览SQL并点击Save:
现在我们就创建好first_user这个用户,它属于first_role,并且应该具有对first_table
进行查询的能力。
创建一个新的连接:
为新连接命名first_user_connection
:
单击“Connection”选项卡。输入 RDS endpoint、first_user
用户名、以及刚刚为新用户定义的密码。然后单击“Save”:
展开first_user_connection
,然后展开数据库。右键单击first_database
,然后选择Query Tool
以first_user 身份打开一个会话:
执行以下语句:
select * from first_schema.first_table;
成功查询到数据:
测试一下该用户是否具有create table的权限:
create table if not exists first_schema.second_table(
col_pk serial,
col_money numeric(12,2),
col_short_str varchar(100),
col_datetime timestamp(0) without time zone
);
如果想要为我们的 RDS / Aurora PostgreSQL
实例创建其他 DBA 用户(类似于 masteruser),可执行以下命令:
--replace thepassword with a real password
CREATE ROLE new_dba_user WITH PASSWORD 'thepassword' CREATEDB CREATEROLE LOGIN;
GRANT rds_superuser TO new_dba_user;
参考: https://repost.aws/zh-Hans/knowledge-center/rds-aurora-postgresql-clone-master-user