角色和用户

在 PostgreSQL 中,角色包含用户和组的概念。

  • CREATE USER 和 CREATE GROUP 语句实际上是 CREATE ROLE 语句的别名。不同之处在于用户是具有LOGIN权限的角色。

  • 角色是在 PostgreSQL 集群级别定义的,并且在集群内的所有数据库中都有效。角色不是针对单个数据库创建的。

查看现有的role

在 pgAdmin 中,展开 PostgreSQL下的Login/Group Roles:

image-20231104212056746

红框里的是LOGIN权限的role。如果该角色具有LOIGN权限,则将其绘制为用户(例如 rdsadmin 和 masteruser)

创建role

右键创建一个新的Login/Group Role:

image-20231104212933863

为角色命名first_role:

image-20231104212954157

预览SQL,然后创建:

image-20231104213007402

右键first_database,选择Query Tool

image-20231104213040780

执行以下SQL,以授予一些权限到刚才创建的新角色:

# 授予该角色从表中进行 SELECT 的能力,以及使用包含该表的schema的能力。
GRANT USAGE ON SCHEMA first_schema TO first_role;
GRANT SELECT ON first_schema.first_table TO first_role;

image-20231104213132922

创建新用户

右键再创建一个Login/Group Role:

image-20231104213209526

为角色命名first_user:

image-20231104213225032

进入Definition,输入密码:

image-20231104213300937

进入Privileges,设置Can login:

image-20231104213329507

进入Membership,点击+,并选择first_role作为User/Role:

image-20231104213403121

最后,预览SQL并点击Save:

image-20231104213424329

现在我们就创建好first_user这个用户,它属于first_role,并且应该具有对first_table进行查询的能力。

验证用户权限

创建一个新的连接:

image-20231104213520766

为新连接命名first_user_connection

image-20231104213553257

单击“Connection”选项卡。输入 RDS endpoint、first_user用户名、以及刚刚为新用户定义的密码。然后单击“Save”:

image-20231104213654323

展开first_user_connection,然后展开数据库。右键单击first_database,然后选择Query Tool以first_user 身份打开一个会话:

image-20231104213844627

执行以下语句:

select * from first_schema.first_table;

成功查询到数据:

image-20231104213902962

测试一下该用户是否具有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
  );

image-20231104213943147

附:为RDS创建DBA User

如果想要为我们的 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