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 默认的用户权限
表2 三权分立较默认权限变化说明
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 内置角色
关于内置角色有如下约束:
- 以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;