
达梦数据库安全管理与权限控制实战本文站在运维角度系统梳理了达梦数据库安全管理的核心内容包括用户管理、权限控制、角色管理、审计、数据加密等结合实际运维需求和具体实现方法适合DBA和运维人员参考。文章目录达梦数据库安全管理与权限控制实战一、数据库安全概述1.1 为什么要做数据库安全1.2 运维角度的安全需求二、用户管理2.1 创建用户2.2 密码策略2.3 修改和删除用户2.4 用户管理运维实践三、权限管理3.1 权限分类3.2 系统权限3.3 对象权限3.4 权限管理运维实践四、角色管理4.1 什么是角色4.2 预定义角色4.3 自定义角色4.4 角色管理运维实践五、审计管理5.1 什么是数据库审计5.2 开启审计5.3 审计策略配置5.4 查看审计日志5.5 审计运维实践六、数据加密6.1 透明数据加密TDE6.2 列级加密6.3 应用层加密七、安全检查清单7.1 日常安全检查项7.2 定期安全巡检八、学习心得一、数据库安全概述1.1 为什么要做数据库安全数据库存储着企业的核心数据包括客户信息、业务数据、财务数据等一旦泄露或被篡改将造成不可估量的损失。数据库安全面临的威胁威胁类型说明典型场景未授权访问没有权限的人访问了数据开发人员直接查生产库用户密码越权操作有权限但做了超出权限的事普通用户删除了系统表数据泄露敏感数据被外泄客户手机号、身份证号被导出数据篡改数据被恶意修改订单金额被篡改审计缺失出了问题查不到是谁干的误删数据后无法追溯1.2 运维角度的安全需求作为运维人员数据库安全管理的核心需求是最小权限原则每个用户只给完成工作必需的最小权限职责分离开发、测试、运维、审计各角色权限分离可追溯所有操作都有审计日志出问题能查到人敏感数据保护密码、手机号、身份证等敏感数据加密存储账号生命周期管理入职开通、离职回收、定期清理僵尸账号密码安全强密码策略、定期修改、禁止弱密码二、用户管理2.1 创建用户-- 基本创建用户CREATEUSERUSER01 IDENTIFIEDBYDameng123!;-- 创建用户并指定表空间CREATEUSERUSER01 IDENTIFIEDBYDameng123!DEFAULTTABLESPACEMAINTEMPORARYTABLESPACETEMP;-- 创建用户并指定密码策略CREATEUSERUSER01 IDENTIFIEDBYDameng123!PASSWORD_POLICY15-- 密码策略见下文FAILED_LOGIN_ATTEMPTS5-- 连续失败5次锁定PASSWORD_LOCK_TIME1-- 锁定1天PASSWORD_LIFE_TIME90-- 密码90天过期PASSWORD_GRACE_TIME7;-- 过期后7天宽限期2.2 密码策略达梦数据库的密码策略PASSWORD_POLICY是一个位掩码可以组合使用位值策略说明1长度检查密码长度至少9位2大小写检查必须包含大写和小写字母4数字检查必须包含数字8特殊字符检查必须包含特殊字符常用组合PASSWORD_POLICY0不检查不推荐PASSWORD_POLICY15全部检查1248推荐生产环境-- 查看用户密码策略SELECTUSERNAME,PASSWORD_POLICYFROMDBA_USERSWHEREUSERNAMEUSER01;-- 修改用户密码ALTERUSERUSER01 IDENTIFIEDBYNewPassword123!;-- 解锁用户ALTERUSERUSER01 ACCOUNTUNLOCK;-- 锁定用户ALTERUSERUSER01 ACCOUNTLOCK;2.3 修改和删除用户-- 修改用户默认表空间ALTERUSERUSER01DEFAULTTABLESPACEUSERS;-- 删除用户用户下没有对象时DROPUSERUSER01;-- 删除用户及其所有对象慎用DROPUSERUSER01CASCADE;2.4 用户管理运维实践运维需求1新员工入职开通数据库账号-- 步骤1创建用户设置强密码策略CREATEUSERDEV_ZHANGSAN IDENTIFIEDBYInit2026PASSWORD_POLICY15FAILED_LOGIN_ATTEMPTS5PASSWORD_LOCK_TIME1PASSWORD_LIFE_TIME90;-- 步骤2授予开发角色角色见下文GRANTDEV_ROLETODEV_ZHANGSAN;-- 步骤3通知用户首次登录修改密码-- 用户登录后执行ALTER USER DEV_ZHANGSAN IDENTIFIED BY 新密码;运维需求2员工离职回收账号-- 步骤1先锁定账号防止继续登录ALTERUSERDEV_ZHANGSAN ACCOUNTLOCK;-- 步骤2查看用户拥有的对象SELECTOBJECT_TYPE,COUNT(*)FROMDBA_OBJECTSWHEREOWNERDEV_ZHANGSANGROUPBYOBJECT_TYPE;-- 步骤3如果有重要对象先转移或备份-- 步骤4确认无重要对象后删除DROPUSERDEV_ZHANGSANCASCADE;运维需求3清理长期未登录的僵尸账号-- 查看用户最后登录时间需要开启审计SELECTUSERNAME,LAST_LOGIN_DATE,ACCOUNT_STATUSFROMDBA_USERSWHEREACCOUNT_STATUSOPEN;-- 锁定超过90天未登录的账号ALTERUSERUSER01 ACCOUNTLOCK;三、权限管理3.1 权限分类达梦数据库的权限分为两大类权限类型说明示例系统权限对数据库级别的操作权限CREATE SESSION、CREATE TABLE、CREATE USER对象权限对具体对象的操作权限SELECT ON表、INSERT ON表、EXECUTE ON存储过程3.2 系统权限常用系统权限权限说明CREATE SESSION登录数据库CREATE TABLE创建表CREATE VIEW创建视图CREATE SEQUENCE创建序列CREATE PROCEDURE创建存储过程CREATE TRIGGER创建触发器CREATE USER创建用户ALTER USER修改用户DROP USER删除用户CREATE ANY TABLE在任意模式下创建表ALTER ANY TABLE修改任意表DROP ANY TABLE删除任意表SELECT ANY TABLE查询任意表INSERT ANY TABLE向任意表插入UPDATE ANY TABLE更新任意表DELETE ANY TABLE删除任意表数据DBA管理员权限几乎所有权限-- 授予系统权限GRANTCREATESESSION,CREATETABLE,CREATEVIEWTOUSER01;-- 授予权限并允许转授GRANTCREATETABLETOUSER01WITHADMINOPTION;-- 回收系统权限REVOKECREATETABLEFROMUSER01;-- 查看用户拥有的系统权限SELECT*FROMDBA_SYS_PRIVSWHEREGRANTEEUSER01;3.3 对象权限常用对象权限权限适用对象说明SELECT表、视图、序列查询INSERT表、视图插入UPDATE表、视图更新DELETE表、视图删除ALTER表、序列修改结构INDEX表创建索引REFERENCES表创建外键引用EXECUTE存储过程、函数、包执行-- 授予对象权限GRANTSELECT,INSERTONT_EMPTOUSER01;GRANTSELECTONT_DEPTTOUSER01;GRANTEXECUTEONSP_GET_EMP_COUNTTOUSER01;-- 授予所有权限GRANTALLONT_EMPTOUSER01;-- 授予权限并允许转授GRANTSELECTONT_EMPTOUSER01WITHGRANTOPTION;-- 回收对象权限REVOKEINSERTONT_EMPFROMUSER01;-- 查看用户拥有的对象权限SELECT*FROMDBA_TAB_PRIVSWHEREGRANTEEUSER01;3.4 权限管理运维实践运维需求1给开发人员只读权限查生产库-- 创建只读用户CREATEUSERREADONLY IDENTIFIEDBYReadOnly2026PASSWORD_POLICY15;-- 只授予登录权限GRANTCREATESESSIONTOREADONLY;-- 授予业务表的查询权限按需授予不要用SELECT ANY TABLEGRANTSELECTONT_EMPTOREADONLY;GRANTSELECTONT_DEPTTOREADONLY;GRANTSELECTONT_ORDERTOREADONLY;-- 如果表很多可以用动态SQL批量授权BEGINFORRECIN(SELECTTABLE_NAMEFROMDBA_TABLESWHEREOWNERBIZ_USER)LOOPEXECUTEIMMEDIATEGRANT SELECT ON BIZ_USER.||REC.TABLE_NAME|| TO READONLY;ENDLOOP;END;/运维需求2给应用账号只给必要的DML权限-- 创建应用用户CREATEUSERAPP_USER IDENTIFIEDBYApp2026StrongPASSWORD_POLICY15DEFAULTTABLESPACEAPP_DATA;-- 授予登录和创建会话GRANTCREATESESSIONTOAPP_USER;-- 只授予业务表的增删改查不给DDL权限GRANTSELECT,INSERT,UPDATE,DELETEONT_EMPTOAPP_USER;GRANTSELECT,INSERT,UPDATE,DELETEONT_ORDERTOAPP_USER;-- 不给CREATE TABLE、DROP TABLE等DDL权限-- 不给ALTER ANY TABLE等危险权限运维需求3临时授权用完即收-- 场景开发人员临时需要查某张表排查问题-- 步骤1临时授权GRANTSELECTONT_SENSITIVETODEV_ZHANGSAN;-- 步骤2记录授权信息谁、什么时间、授权什么、原因-- 步骤3问题排查完后立即回收REVOKESELECTONT_SENSITIVEFROMDEV_ZHANGSAN;四、角色管理4.1 什么是角色角色是一组权限的集合可以把常用的权限打包成角色然后把角色授予用户避免逐个授权。角色的优势简化权限管理不用给每个用户逐个授权统一管理修改角色权限所有拥有该角色的用户自动生效职责分离不同角色对应不同岗位职责4.2 预定义角色达梦数据库自带一些常用角色角色说明DBA数据库管理员几乎所有权限RESOURCE资源角色可创建表、视图、序列等CONNECT连接角色可登录数据库PUBLIC公共角色所有用户默认拥有注意生产环境不要随便给DBA、RESOURCE这些大权限角色应该自定义精细化角色。4.3 自定义角色-- 创建角色CREATEROLE DEV_ROLE;CREATEROLE READONLY_ROLE;CREATEROLE APP_ROLE;-- 给角色授权GRANTCREATESESSION,CREATETABLE,CREATEVIEW,CREATESEQUENCETODEV_ROLE;GRANTSELECTONT_EMPTODEV_ROLE;GRANTSELECTONT_DEPTTODEV_ROLE;-- 只读角色GRANTCREATESESSIONTOREADONLY_ROLE;GRANTSELECTONT_EMPTOREADONLY_ROLE;GRANTSELECTONT_DEPTTOREADONLY_ROLE;GRANTSELECTONT_ORDERTOREADONLY_ROLE;-- 应用角色GRANTCREATESESSIONTOAPP_ROLE;GRANTSELECT,INSERT,UPDATE,DELETEONT_EMPTOAPP_ROLE;GRANTSELECT,INSERT,UPDATE,DELETEONT_ORDERTOAPP_ROLE;-- 把角色授予用户GRANTDEV_ROLETODEV_ZHANGSAN;GRANTREADONLY_ROLETOREADONLY_USER;GRANTAPP_ROLETOAPP_USER;-- 查看角色拥有的权限SELECT*FROMROLE_SYS_PRIVSWHEREROLEDEV_ROLE;SELECT*FROMROLE_TAB_PRIVSWHEREROLEDEV_ROLE;-- 查看用户拥有的角色SELECT*FROMDBA_ROLE_PRIVSWHEREGRANTEEDEV_ZHANGSAN;-- 回收角色REVOKEDEV_ROLEFROMDEV_ZHANGSAN;-- 删除角色DROPROLE DEV_ROLE;4.4 角色管理运维实践运维需求按岗位职责设计角色体系-- 1. 开发角色开发环境用有DDL和DML权限CREATEROLE ROLE_DEV;GRANTCREATESESSIONTOROLE_DEV;GRANTCREATETABLE,CREATEVIEW,CREATESEQUENCE,CREATEPROCEDURE,CREATETRIGGERTOROLE_DEV;-- 业务表的DML权限按需授予-- 2. 只读角色生产环境查问题用只有SELECTCREATEROLE ROLE_READONLY;GRANTCREATESESSIONTOROLE_READONLY;-- 批量授予业务表SELECT权限-- 3. 应用角色应用连接用只有DML没有DDLCREATEROLE ROLE_APP;GRANTCREATESESSIONTOROLE_APP;-- 业务表的SELECT/INSERT/UPDATE/DELETE权限-- 4. 运维角色运维人员用有部分系统权限CREATEROLE ROLE_OPS;GRANTCREATESESSIONTOROLE_OPS;GRANTALTERSESSION,ALTERSYSTEMTOROLE_OPS;-- 按需授予监控视图查询权限-- 5. 审计角色审计人员用只有审计相关权限CREATEROLE ROLE_AUDIT;GRANTCREATESESSIONTOROLE_AUDIT;-- 审计日志查询权限五、审计管理5.1 什么是数据库审计数据库审计是记录和监控数据库操作的机制可以记录谁在什么时间做了什么操作用于安全追溯、合规检查和问题排查。审计的作用操作追溯出了问题能查到是谁干的合规要求等保、金融监管等要求数据库审计安全监控实时监控异常操作如批量导出、删除表行为分析分析用户操作习惯发现异常行为5.2 开启审计-- 查看审计是否开启SELECTPARA_VALUEFROMV$DM_INIWHEREPARA_NAMEENABLE_AUDIT;-- 开启审计需要SYSDBA权限静态参数重启生效SP_SET_PARA_VALUE(2,ENABLE_AUDIT,1);-- 审计开关1开启0关闭-- 开启后需要重启数据库5.3 审计策略配置-- 语句级审计审计某类SQL语句AUDITCREATETABLE;-- 审计建表AUDITDROPTABLE;-- 审计删表AUDITALTERTABLE;-- 审计改表AUDITCREATEUSER;-- 审计建用户AUDITDROPUSER;-- 审计删用户AUDITGRANT;-- 审计授权AUDITREVOKE;-- 审计回收权限-- 对象级审计审计对某个对象的操作AUDITSELECTONT_SENSITIVE;-- 审计查询敏感表AUDITINSERTONT_EMP;-- 审计插入员工表AUDITUPDATEONT_EMP;-- 审计更新员工表AUDITDELETEONT_ORDER;-- 审计删除订单AUDITALLONT_SENSITIVE;-- 审计对敏感表的所有操作-- 用户级审计审计某个用户的所有操作AUDITALLBYDEV_ZHANGSAN;-- 审计某用户的所有操作AUDITCONNECTBYDEV_ZHANGSAN;-- 审计某用户的登录登出-- 登录/登出审计AUDITCONNECT;-- 审计所有登录登出5.4 查看审计日志-- 查看审计记录SELECT*FROMSYSAUDITOR.V$AUDITRECORDS;-- 按时间范围查询SELECT*FROMSYSAUDITOR.V$AUDITRECORDSWHEREOP_TIME2026-08-01ANDOP_TIME2026-09-01;-- 按用户查询SELECT*FROMSYSAUDITOR.V$AUDITRECORDSWHEREUSERNAMEDEV_ZHANGSAN;-- 按操作类型查询SELECT*FROMSYSAUDITOR.V$AUDITRECORDSWHEREOPERATIONDROP TABLE;-- 查看审计策略SELECT*FROMSYSAUDITOR.SYSAUDIT;5.5 审计运维实践运维需求1生产环境开启关键操作审计-- 1. 开启审计参数重启生效SP_SET_PARA_VALUE(2,ENABLE_AUDIT,1);-- 2. 审计登录登出AUDITCONNECT;-- 3. 审计DDL操作AUDITCREATETABLE;AUDITALTERTABLE;AUDITDROPTABLE;AUDITCREATEUSER;AUDITALTERUSER;AUDITDROPUSER;AUDITGRANT;AUDITREVOKE;-- 4. 审计敏感表的所有操作AUDITALLONT_USER;AUDITALLONT_ACCOUNT;AUDITALLONT_ORDER;-- 5. 审计DBA用户的所有操作AUDITALLBYSYSDBA;运维需求2审计日志定期归档清理-- 审计日志会越来越大需要定期归档清理-- 步骤1导出30天前的审计日志归档-- 步骤2清理30天前的审计日志DELETEFROMSYSAUDITOR.V$AUDITRECORDSWHEREOP_TIMESYSDATE-30;COMMIT;六、数据加密6.1 透明数据加密TDE透明数据加密Transparent Data Encryption是在数据写入磁盘时自动加密读取时自动解密对应用完全透明。-- 查看加密配置SELECT*FROMV$CIPHER;-- 创建加密表空间CREATETABLESPACEENC_TS DATAFILE/dmdata/enc_ts.dbfSIZE1024ENCRYPTWITHAES256;-- 在加密表空间创建表数据自动加密CREATETABLET_SENSITIVE(IDINTPRIMARYKEY,NAMEVARCHAR(50),ID_CARDVARCHAR(18),PHONEVARCHAR(20))TABLESPACEENC_TS;6.2 列级加密对敏感字段单独加密-- 创建加密列CREATETABLET_USER(IDINTPRIMARYKEY,USERNAMEVARCHAR(50),PASSWORDVARCHAR(100)ENCRYPTWITHAES256,-- 密码加密ID_CARDVARCHAR(18)ENCRYPTWITHAES256,-- 身份证加密PHONEVARCHAR(20)ENCRYPTWITHAES256-- 手机号加密);6.3 应用层加密对于特别敏感的数据可以在应用层加密后再存入数据库-- 达梦提供加密函数SELECTSF_ENCRYPT(明文,密钥,AES256);SELECTSF_DECRYPT(密文,密钥,AES256);-- 密码存储用哈希不可逆SELECTSF_CRYPT_HASH(password,SHA256);七、安全检查清单7.1 日常安全检查项检查项检查方法标准弱密码用户SELECT USERNAME FROM DBA_USERS WHERE …无弱密码僵尸账号查看最后登录时间90天未登录的锁定过度授权查看DBA角色用户非必要不给DBA审计开启SELECT * FROM V$DM_INI WHERE PARA_NAME‘ENABLE_AUDIT’已开启敏感表审计查看审计策略关键表已审计默认密码检查SYSDBA等默认账号已修改默认密码远程登录限制查看IP限制配置限制访问来源备份加密检查备份是否加密敏感数据备份加密7.2 定期安全巡检-- 1. 检查拥有DBA角色的用户SELECT*FROMDBA_ROLE_PRIVSWHEREGRANTED_ROLEDBA;-- 2. 检查超过90天未修改密码的用户SELECTUSERNAME,CREATED,PASSWORD_CHANGE_DATEFROMDBA_USERSWHEREPASSWORD_CHANGE_DATESYSDATE-90;-- 3. 检查被锁定的用户SELECTUSERNAME,ACCOUNT_STATUS,LOCK_DATEFROMDBA_USERSWHEREACCOUNT_STATUSLIKE%LOCK%;-- 4. 检查对象权限谁有什么表的什么权限SELECTGRANTEE,OWNER,TABLE_NAME,PRIVILEGEFROMDBA_TAB_PRIVSWHEREPRIVILEGEIN(DROP,ALTER,DELETE)ORDERBYGRANTEE;-- 5. 检查系统权限SELECTGRANTEE,PRIVILEGEFROMDBA_SYS_PRIVSWHEREPRIVILEGELIKE%ANY%ORDERBYGRANTEE;八、学习心得安全是运维的底线数据库安全不是可有可无的锦上添花而是运维工作的底线。数据泄露、误删、越权操作这些问题一旦发生就是重大事故。安全管理要做在前面不能等出了问题再补。最小权限原则是核心数据库安全管理最核心的原则就是最小权限——每个用户只给完成工作必需的最小权限。开发人员不要给DBA应用账号不要给DDL只读用户不要给DML。权限给多了就是安全隐患。角色比直接授权好管理逐个给用户授权既麻烦又容易出错用角色把权限打包然后给用户授角色管理效率高很多。而且修改角色权限时所有拥有该角色的用户自动生效不用逐个改。审计是最后一道防线权限控制得再好也不能完全杜绝问题。审计是最后一道防线出了问题能查到是谁在什么时间做了什么。生产环境一定要开启关键操作审计特别是DDL、敏感表操作、DBA用户操作。账号生命周期管理很重要很多安全问题来自僵尸账号——员工离职了账号没回收、临时授权用完没收回、测试账号长期存在。要建立账号开通、变更、回收的完整流程定期清理长期未登录的账号。密码安全不能忽视弱密码是最常见的安全漏洞。生产环境一定要开启强密码策略长度、大小写、数字、特殊字符设置密码过期时间和登录失败锁定。SYSDBA等管理员账号的密码尤其要注意不能用默认密码或弱密码。安全和便利要平衡安全不是越严越好太严了影响工作效率也不行。要在安全和便利之间找平衡——生产环境严一点开发环境可以松一点敏感数据严一点普通数据可以松一点。关键是根据数据敏感度和业务场景制定合理的安全策略。