当前位置: 首页 > 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.dtcms.com/a/328411.html

相关文章:

  • 专题:2025城市NOA智能驾驶研究报告|附70+份报告PDF 汇总下载
  • Spring MVC 处理请求的完整流程详解
  • Kubernetes1.28-单Master集群部署
  • 【Vue中key属性的技术分析】
  • 智能装配线cad【8张】三维图+设计说明书
  • 安卓Fragmnet的生命周期
  • 【5】Transformers快速入门:Transformer 是啥?
  • 【接口自动化】-11-接口加密签名 全局设置封装
  • Android领域驱动设计与分层架构实践
  • TF-IDF:信息检索与文本挖掘的统计权重基石
  • 开源生态认证体系介绍
  • 当 GitHub 宕机时,我们如何协作?
  • 机器学习-集成学习(EnsembleLearning)
  • Linux 可执行程序核心知识笔记:ELF、加载、虚拟地址与动态库
  • MLOps(机器学习运维)LLMOps(大语言模型运维)介绍(通过自动化、标准化和协作优化模型的开发、部署、监控和维护流程)
  • Ubuntu与Rocky系统安装Java全指南
  • 【门诊进销存出入库管理系统】佳易王医疗器械零售进销存软件:门诊进销存怎么操作?系统实操教程 #医药系统进销存
  • 湖北手机基站数据分享
  • 当“超级高速“遇见“智能大脑“:5G-A×AI如何重塑万物智联时代
  • 双椒派E2000D开发板Linux环境配置指南
  • WireShark:非常好用的网络抓包工具
  • 【工具】通用文档转换器 推荐 Markdown 转为 Word 或者 Pdf格式 可以批量或者通过代码调用
  • 淘宝化妆品
  • Day52 Java面向对象07 类与对象总结
  • 第五章 树与二叉树
  • 腾讯云iOA:全面提升企业办公安全与效率的智能解决方案
  • 什么时候用WS(WebSocket),什么使用用SSE(Server-Sent Events)?
  • HTTP 协议详解:深入理解 Header 与 Body!
  • 【前端Vue】log-viewer组件的使用技巧
  • 有趣的 npm 库 · json-server