达梦数据库DM用户管理-三权分立与四权分立,用户创建与维护,用户与模式的关系,用户相关权限
一、达梦三权分立与四权分立概念
这是达梦数据库安全管理体系的核心思想,借鉴了行政管理的“分权制衡”原则,旨在防止数据库管理员权力过大,降低内部安全风险,满足国家信息安全等级保护(如等保三级)的要求。
三权分立
- 核心思想: 将数据库系统中最高级别的管理权限拆分给三个独立且相互制约的初始管理员用户。
- 三个关键角色:
- 数据库管理员 (
SYSDBA
):
-
- 拥有数据库的最高系统管理权限。
- 负责:数据库实例的创建、启动、停止、备份恢复、空间管理、性能优化、创建/修改/删除其他用户(普通用户和其他管理员)、授予/回收系统权限、模式对象管理等绝大部分日常运维工作。
- 权限边界: 不能操作审计相关的功能(如查看审计日志、设置审计规则)。
- 数据库安全员 (
SYSSSO
- 在三权中常指代安全管理员,但在四权中更明确):
-
- 拥有数据库对象安全管理的最高权限。
- 负责:强制访问控制(如设置等级、范畴)、设置用户策略(口令策略、资源限制、登录失败处理)、管理审计(启用/禁用审计、定义审计规则、查看和分析审计日志)。
- 权限边界: 不能执行常规数据库对象(如表、视图、存储过程)的创建、修改、删除等操作(这些是SYSDBA的职责),也不能管理数据库实例本身(如备份恢复)。
- 数据库审计员 (
SYSAUDITOR
):
-
- 拥有数据库审计管理的最高权限。
- 负责:独立审计。只能查看和分析审计日志,不能修改审计规则或审计日志本身。
- 权限边界: 除了查看审计日志,几乎不能执行任何其他数据库管理或对象操作。其核心职责就是监督SYSDBA 和 SYSSSO 的操作。
目的: 防止单个管理员权限过大。SYSDBA 负责运行但无法掩盖自己的操作(审计由SYSSSO/SYSAUDITOR管),SYSSSO 负责安全和审计但无法直接操作核心业务数据,SYSAUDITOR 只能查看审计结果进行监督。
四权分立
- 核心思想: 在三权分立的基础上,将安全管理员的角色 (
SYSSSO
) 进一步细化,分离出一个专门负责独立审计的安全管理员。 - 四个关键角色:
- 数据库管理员 (
SYSDBA
): 职责与三权中的SYSDBA完全相同。 - 数据库对象管理员 (
SYSDBO
- 可选或由SYSDBA兼任,非核心四权角色): 有时会被提及,主要负责模式内对象的管理授权,但在核心的四权分立定义中,重点还是下面三个安全相关角色。 - 数据库安全员 (
SYSSSO
):
-
- 职责聚焦于安全管理策略:强制访问控制(等级、范畴)、用户安全策略(口令复杂度、有效期、失败锁定、资源限制)的设置和管理。
- 权限边界: 不再拥有审计权限(不能查看或管理审计日志、规则)。
- 数据库审计员 (
SYSAUDITOR
):
-
- 职责与三权中的SYSAUDITOR相同:仅能独立查看和分析审计日志。
- 数据库审计管理员 (
SYSAUDITOR
或 专用用户 - 核心新增点):
-
- 这是四权分立的关键新增角色。
- 拥有审计配置和管理的最高权限:启用/禁用审计系统、定义审计规则(审计哪些用户、哪些操作)、管理审计日志(清理、转储)。
- 权限边界: 不能查看或修改业务数据,不能修改安全策略(如口令策略)。
目的: 在三权的基础上,实现更彻底的“审计独立”。负责配置审计的人(审计管理员)和执行被审计操作的人(SYSDBA, SYSSSO)以及查看审计结果的人(SYSAUDITOR)三者完全分离,最大程度防止审计功能本身被篡改或绕过。SYSSSO 专注于安全策略,不再接触审计配置。
总结一下就是:
- 三权分立:
SYSDBA
(运维)、SYSSSO
(安全+审计配置)、SYSAUDITOR
(审计查看)。 - 四权分立:
SYSDBA
(运维)、SYSSSO
(安全策略)、专用审计管理员
(审计配置)、SYSAUDITOR
(审计查看)。 核心是将“安全策略管理”和“审计配置管理”分离。
【详细参考《DM8安全管理》第二章,用户识别与鉴别的相关内容】
管理用户的类型
1. SYSDBA
- 英文全称:System Database Administrator
- 含义:
-
- 代表数据库系统的最高管理员,拥有对数据库实例的完全控制权(除审计相关功能外)。
- 职责包括:数据库创建、启动/停止、用户管理、表空间管理、备份恢复、性能调优等所有日常运维操作。
- 权限边界:不能直接操作审计日志或安全策略(如口令复杂度),需由
SYSSSO
或SYSAUDITOR
管理。
2. SYSSSO
- 英文全称:System Security Officer
- 含义:
-
- 代表数据库的安全管理员,专注于安全策略和强制访问控制。
- 职责包括:
-
-
- 设置用户安全策略(密码复杂度、登录失败锁定、资源限制等)。
- 管理强制访问控制(MAC),如数据敏感等级(Level)和范畴(Category)。
- 在三权分立中可能兼管审计配置,但在四权分立中审计权限会被剥离。
-
-
- 权限边界:不能直接操作业务数据或执行常规 DDL/DML。
3. SYSAUDITOR
- 英文全称:System Auditor
- 含义:
-
- 代表独立审计员,负责监督和审查数据库操作。
- 职责包括:
-
-
- 查看和分析审计日志(如用户登录、权限变更、敏感数据访问记录)。
- 确保
SYSDBA
和SYSSSO
的操作合规,防止权力滥用。
-
-
- 权限边界:
-
-
- 仅能查看审计日志,不能修改审计规则或删除日志(在四权分立中,审计配置由专用审计管理员负责)。
-
注:四权管理中的SSO和AUDITOR与三权管理一致。
总结
用户名 | 英文全称 | 角色定位 | 核心权限边界 |
| System Database Admin | 系统管理员 | 无审计/安全策略管理权限 |
| System Security Officer | 安全管理员 | 无数据操作/审计配置权限 |
| System Auditor | 独立审计员 | 仅能查看审计日志 |
这些角色的设计体现了职责分离(SoD)原则,确保数据库管理权、安全权、审计权相互制衡,符合等保、GDPR 等安全合规要求。
参考文献:
自主访问控制 | 达梦技术文档
【详见附录一和附录二】
二、用户的创建及维护
在DM管理工具中输入
创建用户
-
- 主要语法 (
CREATE USER
):
- 主要语法 (
CREATE USER <用户名> IDENTIFIED BY "<密码>"[PASSWORD POLICY <策略名>] -- 应用口令策略[DEFAULT TABLESPACE <表空间名>] -- 设置默认表空间[DEFAULT INDEX TABLESPACE <表空间名>] -- 设置默认索引表空间[DEFAULT ROLE <角色名>] -- 设置默认角色[DISABLED | ENABLED] -- 创建时禁用/启用[ACCOUNT LOCK | UNLOCK] -- 创建时锁定/解锁[LIMIT CONNECT_TIME <分钟>] -- 连接时间限制[FAILED_LOGIN_ATTEMPTS <次数>] -- 登录失败锁定前尝试次数[PASSWORD_LOCK_TIME <分钟>] -- 密码锁定时间[PASSWORD_LIFE_TIME <天>] -- 密码有效期[PASSWORD_REUSE_TIME <天>] -- 密码重用最小间隔[PASSWORD_REUSE_MAX <次数>] -- 密码重用前需变更次数[PASSWORD_GRACE_TIME <天>]; -- 密码过期后宽限期
例如:
-- 使用 CREATE USER 语句创建 DM8 用户,登录密码为 "Dameng123"。
CREATE USER DM8 IDENTIFIED BY "Dameng123";
//注意⚠️:密码设置必须要大于或等于8位,并且必须包含大写、小写、数字
达梦创建用户时报错:
-2504:密码长度不符合规则 (密码设置必须要大于等于8位,本人验证过了)
-2124:对象[DM8]已存在 (用户名已经创建了,不能重复创建)
-2502:密码不符合复杂度规则(必须同时包含大写、小写、数字,缺一不可)
关键要素:
用户名
: 唯一标识符。
密码
: 初始密码,需符合可能的全局或指定口令策略。
DEFAULT TABLESPACE
: 用户创建对象(如表)时,如果没有指定表空间,则默认创建在此表空间。强烈建议明确指定,避免使用SYSTEM
表空间。
安全属性 (FAILED_LOGIN_ATTEMPTS
, PASSWORD_LIFE_TIME
等): 定义账户安全策略(登录失败锁定、密码有效期等)。可以在创建时指定,也可以通过用户属性修改。
执行者: 通常由 SYSDBA
或具有 CREATE USER
系统权限的用户执行。
维护用户
修改用户 (ALTER USER
):
ALTER USER <用户名>[IDENTIFIED BY "<新密码>"] -- 修改密码[PASSWORD POLICY <新策略名>] -- 修改口令策略[DEFAULT TABLESPACE <新表空间名>] -- 修改默认表空间[DEFAULT INDEX TABLESPACE <新表空间名>] -- 修改默认索引表空间[DEFAULT ROLE <新角色名> | NONE | ALL] -- 修改默认角色[DISABLED | ENABLED] -- 禁用/启用用户[ACCOUNT LOCK | UNLOCK] -- 锁定/解锁账户[LIMIT CONNECT_TIME <新值>] -- 修改连接时间限制[FAILED_LOGIN_ATTEMPTS <新值>] -- 修改登录失败尝试次数[PASSWORD_LOCK_TIME <新值>] -- 修改密码锁定时间[PASSWORD_LIFE_TIME <新值>] -- 修改密码有效期[PASSWORD_REUSE_TIME <新值>] -- 修改密码重用间隔[PASSWORD_REUSE_MAX <新值>] -- 修改密码重用前变更次数[PASSWORD_GRACE_TIME <新值>]; -- 修改宽限期
- 用于修改密码、安全属性、默认表空间/角色、启用/禁用状态等。
eg:
ALTER USER DM8 IDENTIFIED BY DM123456aa;
ALTER USER DM8 IDENTIFIED BY "DM123456aa";
//带不带引号都是可以的
删除用户 (DROP USER
):
DROP USER <用户名> [CASCADE];//例如:
DROP USER DM8;
DROP USER DM8 CASCADE;
CASCADE
选项:如果用户拥有任何模式对象(表、视图、过程等),必须使用CASCADE
才能删除用户,该选项会先删除用户拥有的所有对象,然后再删除用户。操作极其危险,务必谨慎!
查询用户信息
- 系统视图:
SYSDBA.DBA_USERS
,SYSDBA.ALL_USERS
,SYSDBA.USER_USERS
(当前用户),SYSDBA.DBA_PROFILES
(查看用户使用的口令策略详情) 等。 - 使用
SELECT
语句查询这些视图获取用户详细信息。
例如:
-- 通过字典表 dba_users 查看基本信息
SELECT username,account_status,created FROM dba_users WHERE username='DM';
三、用户与模式的关系
用户与模式的关系
在达梦数据库中,用户(USER
)和模式(SCHEMA
)的概念紧密关联,遵循以下核心原则:
- 一一对应 (默认): 当创建一个新用户时,数据库会自动为该用户创建一个与之同名的默认模式(
SCHEMA
)。 这是最常见的情况。例如:创建用户SALES_USER
,系统会自动创建模式SALES_USER
。 - 模式归属: 一个模式(
SCHEMA
)必然归属于一个且仅一个数据库用户。 这个用户被称为该模式的所有者(OWNER
)。模式的所有权在创建时确定(通常就是创建它的用户),不能被转移。 - 对象存储: 用户在其所拥有的模式中创建数据库对象(如表、视图、索引、存储过程、序列、同义词等)。这些对象的所有者就是该模式的所有者用户。用户
SALES_USER
在模式SALES_USER
下创建的表ORDERS
,其全名是SALES_USER.ORDERS
。SALES_USER
是这张表的所有者。 - 访问模式对象: 用户要访问非其自身拥有的模式中的对象,必须由该模式的所有者(或具有相应权限的用户如SYSDBA)显式授予必要的对象权限(如
SELECT
,INSERT
,UPDATE
,DELETE
,EXECUTE
等)或者角色权限。用户REPORT_USER
需要查询SALES_USER.ORDERS
表,SALES_USER
需要执行GRANT SELECT ON SALES_USER.ORDERS TO REPORT_USER;
。 - 一个用户,多个模式(即用户与模式是一对多的关系)
- 默认情况下,一个用户只有一个与其同名的模式。
- 一个用户可以拥有多个模式吗?理论上,达梦允许一个用户创建多个模式(使用
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
)。但是,强烈不推荐这种做法,因为这违反了用户与模式一一对应的清晰管理原则,容易导致混乱,且管理不便(权限控制更复杂)。标准的、推荐的做法是:一个业务功能或一个应用对应一个用户,该用户拥有一个同名的模式。
总结: 用户是数据库的访问主体和权限载体,模式是数据库对象的逻辑容器。一个用户对应一个默认同名模式,该用户是其模式内所有对象的唯一所有者。跨模式访问需要显式授权。
用户与表空间的关系
用户和模式 一对多
用户与表空间 一对多 且表空间可以有多个数据文件,而一个数据文件只能属于一个表空间
在达梦数据库中创建用户时,会默认创建一个与用户同名的模式,用户与模式是一对多的关系,用户可以拥有多个模式,但是一个模式只能为一个用户所有
参考文献:
达梦数据库-学习_达梦数据库模式,用户,表空间-CSDN博客
四、用户相关权限
用户权限决定了用户能在数据库中执行哪些操作以及访问哪些数据。达梦权限体系主要分为两类:
系统权限
-
- 定义: 控制用户能否执行特定的数据库系统级操作或管理操作。这些权限通常不直接针对特定对象。
- 范围: 影响整个数据库实例或数据库管理本身。
- 常见例子:
-
-
CREATE TABLE
(在任何拥有的模式中创建表)CREATE VIEW
(在任何拥有的模式中创建视图)CREATE USER
,ALTER USER
,DROP USER
(用户管理)CREATE ROLE
,DROP ROLE
(角色管理)GRANT ANY OBJECT PRIV
,GRANT ANY PRIVILEGE
(授予对象/系统权限)ALTER DATABASE
(修改数据库)BACKUP DATABASE
,RESTORE DATABASE
(备份恢复)SELECT ANY TABLE
(查询任何用户的表 - 慎用!)AUDIT ANY
(审计任何对象 - SYSSSO/审计管理员相关)CREATE PUBLIC SYNONYM
(创建公共同义词)
-
-
- 授权语法 (
GRANT
/REVOKE
):
- 授权语法 (
GRANT <系统权限名> [, <系统权限名>...] TO <用户名> | <角色名> [WITH ADMIN OPTION];
REVOKE <系统权限名> [, <系统权限名>...] FROM <用户名> | <角色名>;
eg:
GRANT CREATE TABLE TO TEST;
REVOKE CREATE TABLE FROM TEST;
-
-
WITH ADMIN OPTION
: 允许被授权者将该系统权限再授予其他用户或角色。具有传递性。
-
- 查询: 系统视图
SYSDBA.DBA_SYS_PRIVS
,SYSDBA.USER_SYS_PRIVS
。
对象权限
- 定义: 控制用户能否在特定的数据库对象(如表、视图、序列、存储过程、包、同义词等)上执行特定操作。
- 范围: 针对具体的、已存在的数据库对象。
- 常见对象权限:
- 表/视图:
SELECT
,INSERT
,UPDATE
,DELETE
,REFERENCES
(创建外键引用),ALTER
,INDEX
(在表上创建索引) - 序列:
SELECT
(获取下一个值),ALTER
- 存储过程/函数/包:
EXECUTE
- 目录 (外部文件访问):
READ
,WRITE
- 同义词: 权限作用于同义词指向的基对象。
- 授权语法 (
GRANT
/REVOKE
):
GRANT <对象权限名> [, <对象权限名>... | ALL [PRIVILEGES]] ON [<模式名>.]<对象名> TO <用户名> | <角色名> [WITH GRANT OPTION];
REVOKE <对象权限名> [, <对象权限名>... | ALL [PRIVILEGES]] ON [<模式名>.]<对象名> FROM <用户名> | <角色名>;
ALL [PRIVILEGES]
: 授予对象上所有可用的权限。WITH GRANT OPTION
: 允许被授权者将该对象权限再授予其他用户或角色。具有传递性。- 授权者: 对象的所有者(用户)或具有该对象
GRANT
权限(通过WITH GRANT OPTION
获得)的用户。
查询: 系统视图 SYSDBA.DBA_TAB_PRIVS
, SYSDBA.USER_TAB_PRIVS
, SYSDBA.DBA_COL_PRIVS
(列级权限) 等。
权限管理的核心原则
- 最小权限原则: 只授予用户完成其工作所必需的最小权限集合。避免授予
PUBLIC
过多权限或滥用ANY
权限(如SELECT ANY TABLE
)。 - 角色(
ROLE
)的使用: 强烈建议将一组相关的权限(系统权限和对象权限)先授予角色,然后再将角色授予用户。这极大地简化了权限管理(批量授权/回收、权限逻辑分组清晰)。角色可以嵌套。 PUBLIC
角色: 这是一个特殊的预定义角色,数据库中的每个用户都自动拥有这个角色。授予PUBLIC
的权限相当于授予了所有用户。极其谨慎地使用GRANT ... TO PUBLIC;
。- 权限回收 (
REVOKE
): 使用REVOKE
语句撤销之前授予的权限。注意级联回收问题(使用WITH ADMIN/GANT OPTION
授予的权限)。 - 权限生效: 新授予的权限通常需要用户重新连接数据库才能生效。回收权限立即生效。
总结: 达梦通过精细的系统权限和对象权限控制用户的操作能力。SYSDBA
拥有最广泛的权限进行用户、权限、对象管理。遵循最小权限原则和使用角色是安全、高效权限管理的关键。理解 WITH ADMIN OPTION
和 WITH GRANT OPTION
的区别对于权限的传递性至关重要。SYSSSO
和审计管理员则拥有特定的安全管理与审计配置权限。
参考文献:
《DM8_SQL语言使用手册》
《DM8安全管理》附录 | 达梦技术文档