高权限账号最佳实践

本文主要介绍 RDS-PostgreSQL 高权限账号具有的功能,以及在不同场景下的最佳实践。

背景信息

RDS-PostgreSQL 支持高权限账号。在创建 RDS-PostgreSQL 实例时,系统自动创建的账号即为高权限账号。通过高权限账号,您可以根据业务需要创建并管理多个业务账号和业务数据库,从而在一个实例内实现权限隔离和数据隔离。

由于系统创建的高权限账号的默认 Database 是 postgres,是系统 Database,不适用于创建业务数据库。因此建议您使用高权限账号创建业务账号,通过业务账号创建业务数据库。

1. 多账号权限隔离

在很多场景,您可能希望不同职能的人员对数据库具有不同的操作权限。例如:部分职能人员的账号可以创建数据库和表,部分账号可以对数据进行增删改查操作,而部分人员的账号只能对数据进行读取操作。通过高权限账号,您可以创建多个业务账号,并对不同的业务账号授予不同的操作权限,从而实现权限分离。

2. 多个应用数据隔离共享实例资源

为节省开支,您可以将多个应用部署在同一个数据库实例中,通过不同的业务数据库对应用进行隔离。不同应用之间共享 RDS-PostgreSQL 的资源,包括:CPU 资源、内存资源及存储资源。因此对于多个应用,您只需维护一个数据库实例即可。

前提条件

您已成功创建 RDS-PostgreSQL 实例,可参考创建常规实例

权限隔离:创建业务数据库及业务账号

方案1: 业务账号为业务数据库的 Owner,拥有业务数据库的所有权限。

1. 高权限帐号通过以下命令创建有登录权限的业务账号。

CREATE USER Newuser-Name LOGIN PASSWORD 'Password';

  •   Newuser-Name:业务账号的名称。
  •   Password:业务账号的密码。

2. 通过以下命令,为业务账号创建业务数据库。

GRANT Newuser-Name to Rootuser-Name;

CREATE DATABASE Newdb-Name OWNER Newuser-Name;

REVOKE Newuser-Name from Rootuser-Name;

  • Rootuser-Name:您在创建 RDS-PostgreSQL 实例时创建的高权限账号的名称。
  • Newdb-Name:业务数据库的名称。

3. 业务账号通过以下命令访问业务数据库进行建表等操作。

psql -U Newuser-Name r -h Domain-Name -p Port Newdb-Name;

方案2:高权限账号为业务数据库的 Owner,高权限账号向业务账号授予业务数据库的权限。

1. 高权限帐号通过以下命令创建有登录权限的业务账号。

CREATE USER Newuser-Name LOGIN PASSWORD 'Password';

  • Newuser-Name:业务账号的名称。
  • Password:业务账号的密码。

2. 通过以下命令,创建业务数据库。

CREATE DATABASE Newdb-Name;

Newdb-Name:业务数据库的名称。

3. 业务账号通过以下命令授权业务数据库相应的权限。

GRANT ALL ON DATABASE Newdb-Name TO Newuser-Name;

4. 业务账号通过以下命令访问业务数据库并进行建表等操作。

psql -U Newuser-Name -h Domain-Name -p Port Newdb-Name;

  • Domain-Name:RDS-PostgreSQL 实例的访问域名。
  • Port:RDS-PostgreSQL 实例的连接端口。

数据隔离:业务数据库权限分离

1. 通过以下命令,创建业务数据库。

CREATE DATABASE Newdb-Name;

Newdb-Name:数据库的名称。

2. 通过以下命令,创建 DDL 账号,并授予 DDL 账号对业务数据库的所有权限。

CREATE USER Deployuser-Name LOGIN PASSWORD 'Password-ddl';

GRANT ALL ON DATABASE Newdb-Name TO Deployuser-Name;

  • Deployuser-Name:DDL 账号的名称。
  • Password-ddl:DDL 账号的密码。
  • Newdb-Name:业务数据库的名称。

3. 通过以下命令,创建 DML 账号,并授予 DML 账号对指定业务数据库增删改查所有业务表的权限。

CREATE USER Dmluser-Name LOGIN PASSWORD 'Password-dml';

GRANT CONNECT ON DATABASE Newdb-Name TO Dmluser-Name;

\c Newdb-Name;

GRANT INSERT,UPDATE,DELETE,SELECT ON ALL TABLES IN SCHEMA public TO Dmluser-Name;

  • Dmluser-Name:DML 账号的名称。
  • Password-dml:DML 账号的密码。

4. 通过以下命令,创建只读账号,并授予只读账号查询业务库中所有业务表的权限。

CREATE USER Readonlyuser-Name LOGIN PASSWORD 'Password-readonly';

GRANT CONNECT ON DATABASE newdb TO readonlyuser;

\c Newdb-Name;

GRANT SELECT ON ALL TABLES IN SCHEMA public TO Readonlyuser-Name;

  • Readonlyuser-Name:只读账号的名称。
  • Password-readonly:只读账号的密码。
以上内容是否解决了您的问题?
请补全提交信息!
咨询·建议

电话咨询

400-151-8800

邮件咨询

cloud@pingan.com

在线客服

工单支持

解决云产品相关技术问题