高斯数据库-权限管理(1)

405 阅读5分钟

1. 默认的权限机制

数据库集群在创建数据库对象之后,数据库管理员和对象所有者相同的权限。换句话讲,默认只有对象所有者和系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象权限授予其它用户。
GaussDB支持以下的权限:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • TRUNCATE
  • REFERENCES
  • CREATE
  • CONNECT
  • EXECUTE
  • USAGE
  • ALTER
  • DROP
  • COMMENT
  • INDEX
  • VACUUM

注意:不同的权限与不同的对象相关联。
要撤销已授予的权限可以使用REVOKE。对象所有者的权限(例如ALTER/DROP/COMMENT/INDEX/VACUUM/GRANT/REVOKE)是隐式拥有的,即只要拥有对象所有权就拥有这些隐式权限。对象所有者可以撤销自己的普通权限(SELECT/INSERT/UPDATE/DELETE),例如,使表对自己以及其他人只读。

2. 管理员

2.1 初始用户

集群安装过程中自动生成的账户,初始用户也是系统管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。
初始用户会绕过所有权限检查。建议仅仅作为DBA管理用途,而非业务应用。

2.2 系统管理员

系统管理员具有SYSADMIN属性的账户,默认情况下与对象所有者具有相同的权限,但是不包括dbe_perf模式的对象权限和使用Roach工具执行备份恢复的权限。

create user testuser with SYSADMIN password "Gauss_2024";

或者当某个用户存在时:

alter user testuser SYSADMIN;

2.3 安全管理员

安全管理员特指具有CREATEROLE属性的账户,具有创建、修改、删除用户或角色的权限,以及赋予或者撤销任何非系统管理员、内置角色、永久用户、运维管理员和私用用户角色的权限。

create user testuser with CREATEROLE password "Gauss_2024";

用户已存在时:

alter user testuser CREATEROLE;

2.4 审计管理员

审计管理员具有AUDITADMIN属性的账户,具有查看和删除审计日志的权限。
三权分立关闭时,请以系统管理员或者安全管理员身份连接 数据库,三权分立打开时,请以安全管理员身份连接数据库,并使用带AUDITADMIN 选项的CREATE USER语句或 ALTER USER语句进行设置。

create user testuser with AUDITUSER password;

或者

alter user testuser AUDITADMIN;

2.5 监控管理员

具有查看dbe_perf模式下视图和函数的 权限,亦可以对dbe_perf模式的对象权限进行授予或收回。
创建新的监控管理员,请以系统管理员身份连接数据库,并使用带有MONADMIN选项的SQL语句:

create user testuser with MONADMIN password "Gauss_2024";

或者

alter user testuser MONADMIN;

2.6 运维管理员

运维管理员是指具有OPRADMIN属性的账户,具有使用Roach工具执行备份恢复的权限。

create user testuser with OPRADMIN password "Gauss_2024";

或者

alter user testuser OPRADMIN;

2.7 安全策略管理员

是指具有POLADMIN属性的账户

create user testuser with POLAMDIN password "Gauss_2024";

2.8 逻辑集群管理员

实验室特性

3.三权分立

使用三权分立权限管理模型,应在数据库初始化阶段指定,不建议来回切换权限管理模型。
表1 默认的用户权限

image.png 表2 三权分立较默认权限变化说明

image.png

4. 用户

4.1 创建、修改和删除用户

  • 创建用户,并且用户具有CREATEDB属性。
create user testuser with CREATEDB password "Gauss_2024";
  • 创建系统管理员,SYSADMIN
create user testuser with SYSADMIN password "Gauss_2024";
  • 删除现有用户,使用DROP USER.
  • 更改用户(重命名用户或者更改密码),使用ALTER USER。
  • 查看用户列表,查询视图PG_USER
select * from pg_user;
  • 要查看用户属性,查询系统表PG_AUTHID
select * from pg_authid;

5. 角色

通过GRANT把角色授予用户后,用户即具有了角色的所有权限。GaussDB提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。要撤销或重新授予用户和角色对PUBLIC的权限,可通过在GRANT和REVOKE指定关键字PUBLIC实现。查看系统所有角色可以通过查询系统表PG_ROLES

select * from PG_ROLES;

5.1 创建、删除和修改角色

  • 要创建角色,请使用CREATE ROLE。
  • 要在现有角色中添加或删除用户,请使用ALTER ROLE。
  • 要删除角色,请使用DROP ROLE。DROP ROLE只会删除角色,并不会删除角色中的成员用户账户

5.2 内置角色

image.png

image.png 关于内置角色有如下约束:

  • 以gs_role_开头的角色名作为数据库的内置角色保留名,禁止新建以“gs_role_” 开头的用户/角色/模式,也禁止将已有的用户/角色/模式重命名为以“gs_role_” 开头;
  • 禁止对内置角色的ALTER和DROP操作;
  • 内置角色默认没有LOGIN权限,不设预置密码;
  • gsql元命令\du和\dg不显示内置角色的相关信息,但若显示指定了pattern为特定内置角色则会显示。
  • 三权分立关闭时,初始用户、具有SYSADMIN权限的用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。三权分立打开 时,初始用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行 GRANT/REVOKE管理。例如:

GRANT gs_role_signal_backend TO user1;

REVOKE gs_role_signal_backend FROM user1;