GaussDB 数据库架构师修炼(十三)安全管理(2)-数据库权限管理

1 用户和角色

  • 基于角色的访问控制( Role-Based Access Control,简称RBAC ),是通过将权限赋予给对应的角色,再将角色授予给用户,可实现用户访问控制权限管理。

  • 对于GaussDB来说,用户和角色是几乎等同的两个概念,唯一的区别是在创建用户的时候会默认授予用户LOGIN权限,而且会自动创建与用户同名的模式。

  • 用户( USER)主要用来连接数据库,创建、访问数据库对象和执行SQL语句。

  • 角色( ROLE)通常用来组织和管理权限。

  • 通过将多种权限打包成角色授予用户,使得用户获得该角色的所 有权限;若改变角色的权限,则继承该角色的用户权限会被自动 修改。一个用户也可以继承多个不同角色的权限。

  • 使用角色控制哪些用户拥有哪些对象的哪些权限,可以大大简化权限的管理。

2 角色管理

1)创建用户/角色:

复制代码
CREATE USER/ROLE role_name  [  [ WITH ] option  [  ... ] ] [  ENCRYPTED |  UNENCRYPTED ] { PASSWORD |  IDENTIFIED BY } { 'password'  [EXPIRED] |  DISABLE };

注: UNENCRYPTED已禁止使用

2)修改用户/角色:

复制代码
ALTER USER/ROLE role_name  [  [ WITH ]  option  [ ... ] ];

3)删除用户/角色:

复制代码
DROP USER/ROLE [  IF  EXISTS ]  role_name  [, ...];

4)授予/回收用户/角色:

复制代码
GRANT role_name TO role_name  [ WITH ADMIN OPTION ];     

REVOKE  [ ADMIN OPTION FOR ] role_name  FROM role_name [ CASCADE |  RESTRICT ];

子句option语法为:

{SYSADMIN | NOSYSADMIN} 系统管理员

| {MONADMIN | NOMONADMIN} 监控管理员 |

{OPRADMIN | NOOPRADMIN} 运维管理员

| {POLADMIN | NOPOLADMIN} 策略管理员

| {AUDITADMIN | NOAUDITADMIN} 审计管理员

| {CREATEROLE | NOCREATEROLE} 安全管理员

| {PERSISTENCE | NOPERSISTENCE} 永久用户

| {CREATEDB | NOCREATEDB} 创建数据库权限

| {LOGIN | NOLOGIN} 数据库登录权限

3 角色管理 - 举例

举例1:创建角色role1和role2,密码均为Gauss@123

复制代码
gaussdb=>
gaussdb=> CREATE  ROLE  role1 WITH  password 'Gauss@123';
CREATE ROLE
gaussdb=> CREATE  ROLE  role2 WITH  password 'Gauss@123';
CREATE ROLE

举例2:修改角色role1具有LOGIN属性。

复制代码
gaussdb=> ALTER ROLE role1 WITH LOGIN;
ALTER ROLE
gaussdb=>

举例3:查看系统视图pg_roles获取角色的相关信息。

复制代码
gaussdb=>
gaussdb=> SELECT oid, rolname, rolcanlogin,rolpassword FROM  pg_roles WHERE  rolname='role1'  or  rolname='role2';

举例4:将角色role1授予role2,则角色role2属于组role1, 继承role1的相应权限,查看系统表pg_auth_members获 取角色成员关系。

复制代码
gaussdb=> GRANT role1 TO role2;
GRANT ROLE
gaussdb=>
gaussdb=>

SELECT *  FROM  pg_auth_members;

举例5:删除角色role1和role2

复制代码
gaussdb=> DROP  ROLE  role1,role2;
DROP ROLE
gaussdb=>

4 系统权限介绍

系统权限:又称用户属性,指系统规定用户使用数据库的权限,比如连接数据库( LOGIN ),创建数 据库(CREATEDB),创建用户(CREATEROLE)等。

通过CREATE USER/ROLE和ALTER USER/ROLE来指定系统权限;系统权限不能通过角色被继承

例1:创建角色role1,同时授予role1创建用户的权限和创建数据库的权限。

复制代码
create role role1 with createrole createdb password '*******';

例2:授予用户role1监控管理员的权限,同时取消创建数据库的权限

复制代码
gaussdb=> alter role role1 with monadmin nocreatedb;
ALTER ROLE

例3:查看系统视图pg_roles获取角色的相关信息。

复制代码
SELECT  rolname,rolcreaterole,rolcreatedb,rolmonitoradmin FROM  pg_roles WHERE rolname='role1';

5 系统权限 - 三权分立

  • 初始安装用户:集群安装过程中自动生成的帐户 ,拥有系统的最高权限 ,能够执行所有的操作。
  • SYSADMIN:系统管理员权限 ,权限仅次于初始安装用户 ,默认具有与对象所有者相同的权限 ,但不包括监控管理员权限和运维管理员权限。
  • MONADMIN:监控管理员权限,具有监控模式dbe_perf及模式下视图和函数的访问权限和授予权限。
  • OPRADMIN:运维管理员权限 ,具有使用Roach工具执行备份恢复的权限。
  • CREATEROLE:安全管理员权限 ,具有创建 、修改 、删除用户/角色的权限。
  • AUDITADMIN: 审计管理员权限 ,具有查看和维护数据库审计日志的权限。

6 对象权限

  1. 对象权限管理层级
  1. 对象权限支持的类型及对应关系
  • 对象权限:指在数据库、模式、表等数据库对象上执行特定动作的权限,比如: SELECT 、INSERT 、 UPDATE 、DELETE 、CONNECT等。
  • 针对不同的数据库对象有不同的对象权限,相应地可以被授予用户/角色。
  • 通过GRANT/REVOKE来传递对象权限,对象权限可以通过角色被继承。

7 对象权限 - 授权与回收

例1:将对表tbl进行select的权限以及将select再赋权的权限授予用户user1

复制代码
csdn=> GRANT select ON TABLE tbl TO user1 WITH GRANT OPTION;
GRANT
csdn=>
csdn=>

赋权后用户user1可以对tbl进行查询(SELECT)操作且user1有权限将select权限再赋予其他用户

例2:将对表tbl进行alter和drop的权限赋给用户user1 。

复制代码
csdn=> GRANT alter, drop ON TABLE tbl TO user1;
GRANT
csdn=>
csdn=>

赋权后用户user1可以对tbl进行修改( ALTER )和删除( DROP)操作。

举3:撤销用户user1对表tbl进行select的权限。

复制代码
csdn=> REVOKE select ON tbl  FROM user1;
REVOKE
csdn=>
csdn=>

撤销后用户user1对tbl进行select操作会报错: ERROR: permission denied for relation tbl

8 对象权限 ACL字段说明

例:查看系统表pg_class的relacl字段获取表相关的授权信息。

复制代码
csdn=> select relacl from  pg_class where  relname='tbl';
               relacl
------------------------------------
 {csdn=ar*wdDxt/csdn,user1=AP/csdn}
(1 row)

说明:

1)表tbl为用户omm所拥有的表,默认具有表tbl的所有权限。

2)用户user1具有表tbl的select的权限以及将select再赋权的权限。

3)用户user2具有表tbl的select权限。