高斯数据库 (gaussDB) - 管理数据库安全 (6)

管理用户及权限

默认权限机制

数据库对象创建后,进行对象创建的用户就是该对象的所有者。集群安装后的默认情
况下,未开启 三权分立,数据库系统管理员具有与对象所有者相同的权限。也就是说
对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及
通过 16.14.112 GRANT 将对象的权限授予其他用户。
为使其他用户能够使用对象,必须向用户或包含该用户的角色授予必要的权限。
GaussDB 200 支持以下的权限:SELECT、INSERT、UPDATE、DELETE、
TRUNCATE、REFERENCES、CREATE、CONNECT、EXECUTE 和 USAGE。不同的
权限与不同的对象类型关联。有关各权限的详细信息,请参见 16.14.112 GRANT。
要撤消已经授予的权限,可以使用 16.14.123 REVOKE。对象所有者的权限(例如
ALTER、 DROP、GRANT 和 REVOKE)是隐式的,无法授予或撤消。即只要拥有对象
就可以执行对象所有者的这些隐式权限。对象所有者可以撤消自己的普通权限,例
如,使表对自己以及其他人只读。
系统表和系统视图要么只对系统管理员可见,要么对所有用户可见。标识了需要系统
管理员权限的系统表和视图只有系统管理员可以查询。 有关信息,请参考 19 系统表和
系统视图。
数据库提供对象隔离的特性,对象隔离特性开启时,用户只能查看有权限访问的对象
(表、视图、字段、函数),系统管理员不受影响。有关信息,请参考 16.14.3 ALTER
DATABASE。

系统管理员

系统管理员是指具有 SYSADMIN 属性的帐户。集群安装后,默认情况下系统管理员具
有与对象所有者相同的权限。
集群安装过程中自动生成的帐户称为初始用户。初始用户也是系统管理员,其拥有系
统的最高权限,能够执行所有的操作。该帐户与进行集群安装的操作系统用户 omm 同
名,其初始密码为 Gaussdba@Mpp。在第一次登录数据库后,请及时修改此初始化密
码。
初始用户会绕过所有权限检查。建议仅将此初始用户作为 DBA 管理用途,而非业务应
用。
要创建新的数据库管理员,请以管理员用户身份连接数据库,并使用带 SYSADMIN 选
项的 16.14.73 CREATE USER 语句或 16.14.31 ALTER USER 语句进行设置。
CREATE USER sysadmin WITH SYSADMIN password "Bigdata@123";
或者
ALTER USER joe SYSADMIN;
ALTER USER 时,要求用户已存在。

三权分立

默认权限机制和系统管理员两节的描述基于的是集群创建之初的默认情况。

从前面的介绍可以看出,默认情况下拥有 SYSADMIN 属性的系统管理员,具备系统最
高权限。
在实际业务管理中,为了避免系统管理员拥有过度集中的权利带来高风险,可以设置
三权分立,将系统管理员的权限分立给安全管理员和审计管理员。
三权分立后,系统管理员的将不再具有 CREATEROLE 属性(安全管理员)和
AUDITADMIN 属性(审计管理员)能力。即不再拥有创建角色和用户的权限,并不再
拥有查看和维护数据库审计日志的权限。关于 CREATEROLE 属性和 AUDITADMIN 属
性的更多信息请参考 16.14.61 CREATE ROLE。
三权分立后,系统管理员只会对自己作为所有者的对象有权限。
初始用户的权限不受三权分立设置影响。因此建议仅将此初始用户作为 DBA 管理用
途,而非业务应用。
三权分立的设置办法为:将参数 enableSeparationOfDuty 设置为 on。
默认的用户权限
image.png
三权分立较非三权分立权限变化说明
image.png
image.png

用户

使用 CREATE USER 和 ALTER USER 可以创建和管理数据库用户。数据库集群包含一个

或多个已命名数据库。用户和角色在整个集群范围内是共享的,但是其数据并不共

享。即用户可以连接任何数据库,但当连接成功后,任何用户都只能访问连接请求里
声明的那个数据库。
非 三权分立下,GaussDB 200 用户帐户只能由系统管理员或拥有 CREATEROLE 属性的
安全管理员创建和删除。三权分立时,用户帐户只能由初始用户员和安全管理员创
建。
在用户登录 GaussDB 200 时会对其进行身份验证。用户可以拥有数据库和数据库对象
(例如表),并且可以向用户和角色授予对这些对象的权限以控制谁可以访问哪个对
象。除系统管理员外,具有 CREATEDB 属性的用户可以创建数据库并授予对这些数据
库的权限。

创建、修改和删除用户

  • 要创建用户,请使用 SQL 语句 16.14.73 CREATE USER。
    例如:创建用户 joe,并设置用户拥有 CREATEDB 属性。
CREATE USER  joe WITH  CREATEDB  PASSWORD " Bigdata@123 ";
CREATE ROLE
  • 要创建系统管理员,请使用带有 SYSADMIN 选项的 16.14.73 CREATE USER 语
    句 。
  • 要删除现有用户,请使用 16.14.104 DROP USER。
  • 要更改用户帐户(例如,重命名用户或更改密码),请使用 16.14.31 ALTER
    USER。
  • 要查看用户列表,请查询视图 PG_USER:
    SELECT * FROM pg_user;
  • 要查看用户属性,请查询系统表 19.2.12 PG_AUTHID:
    SELECT * FROM pg_authid;

私有用户

对于有多个业务部门,各部门间使用不同的数据库用户进行业务操作,同时有一个同
级的数据库维护部门使用数据库管理员进行维护操作的场景下,业务部门可能希望在
未经授权的情况下,管理员用户只能对各部门的数据进行控制操作(DROP、
ALTER、TRUNCATE),但是不能进行访问操作(INSERT、DELETE、UPDATE、
SELECT、COPY)。即针对管理员用户,表对象的控制权和访问权要能够分离,提高
普通用户数据安全性。
三权分立情况下,管理员对其他用户放在属于各自模式下的表无权限。但是,这种无
权限包含了无控制权限,因此不能满足上面的诉求。为此,GaussDB 200 提供了私有用
户方案。即在非三权分立模式下,创建具有 INDEPENDENT 属性的私有用户。
CREATE USER user_independent WITH INDEPENDENT IDENTIFIED BY " 1234@abc ";
针对该用户的对象,数据库管理员(包含初始用户和其他管理员用户)在未经其授权
前,只能进行控制操作(DROP、ALTER、TRUNCATE),无权进行 INSERT、
DELETE、SELECT、UPDATE、COPY、GRANT、REVOKE、ALTER OWNER 操作。

角色

角色是一组用户的集合。通过 GRANT 把角色授予用户后,用户即具有了角色的所有权
限。推荐使用角色进行高效权限分配。例如,可以为设计、开发和维护人员创建不同
的角色,将角色 GRANT 给用户后,再向每个角色中的用户授予其工作所需数据的差异
权限。在角色级别授予或撤消权限时,这些更改将作用到角色下的所有成员。
GaussDB 200 提供了一个隐式定义的拥有所有角色的组 PUBLIC,所有创建的用户和角
色默认拥有 PUBLIC 所拥有的权限。关于 PUBLIC 默认拥有的权限请参考 16.14.112
GRANT。要撤销或重新授予用户和角色对 PUBLIC 的权限, 可通过在 GRANT 和
REVOKE 指定关键字 PUBLIC 实现。
要查看所有角色,请查询系统表 PG_ROLES:
SELECT * FROM PG_ROLES;

创建、修改和删除角色

非 三权分立时,只有系统管理员和具有 CREATEROLE 属性的用户才能创建、修改或删
除角色。三权分立下,只有初始用户和具有 CREATEROLE 属性的用户才能创建、修改
或删除角色。

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

  
    展开阅读全文