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

达梦数据库(DM Database)角色管理详解|了解DM预定义的各种角色,掌握角色创建、角色的分配和回收

一、DM预定义角色

达梦数据库提供了一系列预定义角色,这些角色已经包含了常用的权限集合,方便管理员快速授权。

1.1 主要预定义角色及其权限

  1. PUBLIC
    • 所有用户自动拥有的基础角色
    • 默认包含一些最基本的权限
    • 注意:谨慎向PUBLIC授予权限,因为会影响所有用户
  1. DBA
    • 数据库管理员角色
    • 包含绝大多数系统权限,仅次于SYSDBA
    • 典型权限:CREATE USER, CREATE TABLE, CREATE VIEW等
  1. RESOURCE
    • 资源创建角色
    • 允许用户创建数据库对象
    • 包含权限:CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE等
  1. CONNECT
    • 基本连接角色
    • 允许用户连接到数据库
    • 包含权限:CREATE SESSION
  1. SELECT_CATALOG_ROLE
    • 数据字典查询角色
    • 允许查询系统视图和字典表
  1. EXECUTE_CATALOG_ROLE
    • 数据字典执行角色
    • 允许执行系统包和过程
  1. DELETE_CATALOG_ROLE
    • 数据字典删除角色
    • 允许删除系统对象(谨慎使用)

二、角色创建

2.1 创建角色语法

CREATE ROLE <角色名>[NOT IDENTIFIED | IDENTIFIED BY <密码> | IDENTIFIED EXTERNALLY];

参数说明:

  • NOT IDENTIFIED:默认选项,角色不需要密码即可启用
  • IDENTIFIED BY:设置角色密码,启用角色时需要提供密码
  • IDENTIFIED EXTERNALLY:通过外部服务验证角色

eg:

  1. 创建基础角色:
CREATE ROLE report_viewer;
  1. 创建带密码的安全角色:
CREATE ROLE finance_operator IDENTIFIED BY "SecurePass123";

创建一个角色role1

create role role1;

创建一张tab1表做个测试

CREATE TABLE TAB1(ID INT,NAME VARCHAR(40));
INSERT INTO TAB1 VALUES(1,'TEST1'),(2,'TEST2');
GRANT ROLE1 TO TEST1;

(这里出现重复的是因为我一条语句执行了两遍,正常情况下只有1、2两行)

再创建TAB2

2.2 示例

-- 1.查看现有角色
SELECT * FROM DBA_ROLES;-- 2.创建新角色
CREATE ROLE ROLE1;-- 3.创建表并插入测试数据
CREATE TABLE TAB1(ID INT, NAME VARCHAR(40));
INSERT INTO TAB1 VALUES(1,'TEST1'),(2,'TEST2');-- 4.创建用户(如果不存在)
CREATE USER TEST1 IDENTIFIED BY "password123";-- 5.授予基本连接权限
GRANT CREATE SESSION TO TEST1;-- 6.将角色授予用户
GRANT ROLE1 TO TEST1;-- 7.验证授予是否成功
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'TEST1';

⚠️注意必须要先创建用户TEST1并成功授予角色,这句话才可以执行成功,否则会报错:-2509:无效的用户或角色[TEST1],因为作者在这里出过错

当时敲的代码为:

SELECT * FROM DBA_ROLES;
CREATE ROLE ROLE1;
CREATE TABLE TAB1(ID INT,NAME VARCHAR(40));
INSERT INTO TAB1 VALUES(1,'TEST1'),(2,'TEST2');
GRANT ROLE1 TO TEST1;
//报错-2509:无效的用户或角色[TEST1]

所以得注意!!!

三、角色权限管理

3.1 为角色授予权限

-- 授予系统权限
GRANT <系统权限> TO <角色名>;-- 授予对象权限
GRANT <对象权限> ON <对象名> TO <角色名>;

授权示例:

  1. 授予系统权限:
GRANT CREATE SESSION, CREATE TABLE TO app_developer;
  1. 授予对象权限:
GRANT SELECT, INSERT ON sales.orders TO sales_operator;
  1. 授予角色给另一个角色:
GRANT resource TO senior_developer;

3.2 从角色回收权限

-- 回收系统权限
REVOKE <系统权限> FROM <角色名>;-- 回收对象权限
REVOKE <对象权限> ON <对象名> FROM <角色名>;

回收示例:

  1. 回收系统权限:
REVOKE CREATE TABLE FROM junior_developer;
  1. 回收对象权限:
REVOKE INSERT ON hr.employees FROM clerk;
  1. 从角色回收另一个角色:
REVOKE resource FROM project_team;

四、角色分配与回收

4.1 将角色授予用户

GRANT <角色名> TO <用户名> [WITH ADMIN OPTION];

WITH ADMIN OPTION:允许用户将该角色授予其他用户

分配示例:

  1. 基本角色分配:
GRANT report_viewer TO user1;
  1. 带管理权限的分配:
GRANT project_lead TO manager WITH ADMIN OPTION;

4.2 从用户回收角色

REVOKE <角色名> FROM <用户名>;

回收示例:

REVOKE temp_access FROM contractor_user;

五、角色使用与激活

5.1 设置默认角色

ALTER USER <用户名> DEFAULT ROLE <角色列表> | ALL [EXCEPT <角色列表>] | NONE;

示例:

  1. 设置特定默认角色:
ALTER USER user1 DEFAULT ROLE report_viewer, data_reader;
  1. 设置除某些角色外的所有角色为默认:
ALTER USER user1 DEFAULT ROLE ALL EXCEPT admin_role;

5.2 启用/禁用角色

SET ROLE <角色名> [IDENTIFIED BY <密码>];
SET ROLE ALL [EXCEPT <角色列表>];
SET ROLE NONE;

示例:

  1. 启用单个角色:
SET ROLE audit_role IDENTIFIED BY "audit123";
  1. 启用多个角色:
SET ROLE role1, role2;
  1. 禁用所有角色:
SET ROLE NONE;

六、角色信息查询

6.1 查看所有角色

-- 查看所有角色定义
SELECT * FROM DBA_ROLES;

(这个时候我还没创建role1)

6.2 查看角色权限

-- 查看角色拥有的系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '<角色名>';
-- 查看角色拥有的对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = '<角色名>';

eg:

SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'TEST1';

SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'TEST1';

6.3 查看用户拥有的角色

SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '<用户名>';

例如:

SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'TEST1';

6.4 查看角色包含的角色

SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '<角色名>';

七、删除角色

删除角色的命令跟删除其他对象的命令一样

-- 删除角色基本语法
DROP ROLE [IF EXISTS] role_name;-- 安全删除角色
DROP ROLE IF EXISTS role_name;
//例如:
DROP ROLE ROLE1;

写在后面:

图片为手机拍摄而非截图实属无奈,望体谅。以后作者方便截图的地方都会采取截图的形式。

http://www.dtcms.com/a/306023.html

相关文章:

  • C++:STL中list的使用和模拟实现
  • Keepalived 实战
  • 《C++二叉搜索树原理剖析:从原理到高效实现教学》
  • 如何利用 Redis 的原子操作(INCR, DECR)实现分布式计数器?
  • Java 控制台用户登录系统(支持角色权限与自定义异常处理)
  • 生成模型实战 | GLOW详解与实现
  • 从理论到实践:全面解析机器学习与 scikit-learn 工具
  • 汽车、航空航天、适用工业虚拟装配解决方案
  • 关于“PromptPilot” 之4 -目标系统软件架构: AI操作系统设计
  • 第六章:进入Redis的List核心
  • 【8月优质EI会议合集|高录用|EI检索稳定】计算机、光学、通信技术、电子、建模、数学、通信工程...
  • 人工智能与家庭:智能家居的便捷与隐患
  • 移动端WebView调试实战 全面排查渲染性能与布局跳动问题
  • ISO 26262 汽车功能安全(腾讯混元)
  • MongoDB系列教程-第二章:MongoDB数据库概念和特点、数据库操作、集合操作、文档操作、规范及常见问题解决、实际应用示例
  • JXD进步25.7.30
  • Thales靶机
  • 《Vuejs设计与实现》第 12 章(组件实现原理 下)
  • 非凸科技受邀出席第九届AIFOF投资创新发展论坛
  • 前端安全防护:XSS、CSRF与SQL注入漏洞深度解析与防御
  • 亚马逊云科技:赋能企业数字化转型,解决实际发展难题
  • 【Axure高保真原型】轮播条形图
  • 让科技之光,温暖银龄岁月——智绅科技“智慧养老进社区”星城国际站温情纪实
  • 【HarmonyOS】鸿蒙应用HTTPDNS 服务集成详解
  • 【Lua】元表常用属性
  • 【MySQL】MySQL索引—B树/B+树
  • 【选型】HK32L088 与 STM32F0/L0 系列 MCU 参数对比与选型建议(ST 原厂 vs 国产芯片)
  • 【LINUX网络】使用TCP简易通信
  • STM32 外部中断 和 定时器中断
  • 使用QT/C++完成的斗地主