当前位置: 首页 > news >正文

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:创建角色role1role2,密码均为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/ROLEALTER 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) 对象权限管理层级

2) 对象权限支持的类型及对应关系

  • 对象权限:指在数据库、模式、表等数据库对象上执行特定动作的权限,比如: 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进行alterdrop的权限赋给用户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=>

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

 8 对象权限 ACL字段说明 

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

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具有表tblselect的权限以及将select再赋权的权限。

3)用户user2具有表tblselect权限。

http://www.lryc.cn/news/619160.html

相关文章:

  • 如何构建PHP表单页面及验证相关原理(PHP基础)
  • 前后端分离项目中Spring MVC的请求执行流程
  • Kubernetes 资源管理全解析:从基础到企业级实践
  • TDengine 可观测性最佳实践
  • VBS 时间函数
  • 移动端网页调试实战,键盘弹出与视口错位问题的定位与优化
  • 需求跟踪矩阵是什么
  • mysql参数调优之 sync_binlog (二)
  • python技巧:控制转台的2个坑。
  • [激光原理与应用-253]:理论 - 几何光学 - 变焦镜头的组成原理及图示解析
  • 分布式事务Seata使用不当引发的全局锁问题
  • hashmap如何解决碰撞
  • JavaWeb从入门到精通!第二天!(Servlet)
  • 揭开Spectre漏洞的神秘面纱
  • 【后端】Spring @Resource和@Autowired的用法和区别
  • 告别数据孤岛!React 路由 3 种传参方法全解析
  • [Robotics_py] 定位滤波器 | 预测与更新 | 扩展卡尔曼滤波器(`EKF`)
  • 嵌入式学习 标准IO(完整版)
  • 浏览器面试题及详细答案 88道(12-22)
  • 【C#补全计划】StringBuilder
  • 【shell脚本编程】-4 shell脚本编写冒泡排序
  • C++11新增关键字和范围for循环
  • Flutter ExpansionPanel组件(可收缩的列表)
  • Qt中定时器介绍和使用
  • Gradle(二)Gradle的优势、项目结构介绍
  • python2操作neo4j
  • HTTPS加密与私有CA配置全攻略
  • spring-cloud整合nacos详细攻略
  • 读《精益数据分析》:UGC平台的数据指标梳理
  • 11-docker单机版的容器编排工具docker-compose基本使用