用户管理
DM 默认的预定义用户:
SYS:系统内置用户,不允许登录。
SYSDBA:系统管理员,拥有几乎所有权限(除审计和强制访问控制)
SYSAUDITOR:系统审计管理员,具有审计相关权限。
SYSSSO:系统安全管理员,具有强制访问控制等权限;
SYSDBO:安全版本才有的用户,安全操作员。
系统口令策略
PWD_POLICY(隐含参数,不在 dm.ini 中)参数指定系统的口令策略,默认为 2;
系统支持的口令策略有:
⚫ 0 无策略
⚫ 1 禁止与用户名相同
⚫ 2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值
⚫ 4 至少包含一个大写字母(
A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口
令策略为 2+4=6 即可。
PWD_POLICY 是隐含参数,PWD_POLICY,只能通过函数或 SQL 语句修改。
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by dameng123;
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 15 BOTH;
SQL 管理用户
create user hrtest IDENTIFIED by dameng123;
用户输入错误多次(默认 3 次),将会被锁定。
select * from dba_users;
select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID;
创建用户
create user hrtest IDENTIFIED by Dameng123 DEFAULT TABLESPACE TBSTEST;
用户锁定和解锁:
alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;
修改用户的默认表空间:
alter user hr DEFAULT TABLESPACE dmtbs;
修改用户密码:
alter user hrtest IDENTIFIED by "Dameng@123";
删除用户:
drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --生产环境慎用
用户资源限制
用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
DM 支持使用 profile 管理用户资源限制(新版本支持,2021 年 10 月以后的版本)
select * from DBA_PROFILES;
create profile profile1 limit FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3,
PASSWORD_LIFE_TIME 180;
alter user hrtest PROFILE profile1;
--查询用户使用的profile资源限制文件
select a.pid profileid, b.name profile_name, a.uid userid, c.name user_name
from SYSUSERPROFILES a, SYSOBJECTS b, SYSOBJECTS c
where a.PID = b.id
and a.UID = c.ID;
用户的资源限制也可以查询如下数据字典:
select * from sysusers;
密码带有特殊字符的登录处理
达梦中密码带有特殊字符需要双引号括起来,在 linux 系统下可以使用单引号‘转义。
[dmdba@KylinDCA03 ~]$ disql hrtest/'"Dameng@123"'
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 1.589(ms)
disql V8
SQL> conn hrtest/"Dameng@123"
也可以使用右斜杠\转义
[dmdba@localhost ~]$ disql dmoa/\"Dameng@123\"
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.162(ms)
disql V8
SQL> alter user dmoa identified by "Dameng123@#'";
操作已执行
已用时间: 6.184(毫秒). 执行号:1000.
SQL> exit
[dmdba@localhost ~]$ disql dmoa/\"Dameng123@#\'\"
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 1.863(ms)
disql V8
SQL>
DM 管理工具管理用户
权限管理
赋予数据库权限(系统权限):
SQL> grant create table to hrtest;
操作已执行
已用时间: 3.431(毫秒). 执行号:1700.赋予数据库权限(系统权限):
SQL> grant create table to hrtest;
操作已执行
已用时间: 3.431(毫秒). 执行号:1700.
赋予对象权限:
SQL> grant select on dmhr.employee to hrtest;
操作已执行
已用时间: 0.535(毫秒). 执行号:1703.
查看当前用户拥有的权限:
select * from session_privs;
权限的回收:
SQL> revoke select on dmhr.employee from hrtest;
操作已执行
已用时间: 1.792(毫秒). 执行号:1704.
SQL> revoke create table from hrtest;
操作已执行
已用时间: 1.704(毫秒). 执行号:1705
赋予查询对象权限,精确到列
SQL> grant select (employee_id, employee_name) on dmhr.employee to hrtest;
操作已执行
已用时间: 2.175(毫秒). 执行号:1706.
相关数据字典:
select * from dba_sys_privs t where t.GRANTEE= 'HRTEST';
select * from dba_role_privs t where t.GRANTEE= 'HRTEST';
select * from dba_tab_privs t where t.GRANTEE= 'HRTEST';
DM 默 认 不 能 授 予 用 户 在 其 他 模 式 下 数 据 定 义 ( DDL ) 的 权 限 , 由 参 数
ENABLE_DDL_ANY_PRIV 指定,默认为 0。
grant select any table to hrtest;
select * from v$parameter t where name like '%ENABLE_DDL_ANY_PRIV%';
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --开启后可正常赋予权限
grant create any table to hrtest;
grant create any index to hrtest;
题目:1、赋予 test 用户更新 emp 表的权限;
2、 赋予 test 用户删除 emp 表的权限。
赋予表更新或删除权限,同时要赋予查询权限,否则报错:
角色管理
角色是权限的集合,角色使权限管理更加方便。
DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。
PUBLIC:具有对当前模式下对象的 DML 数据操作权限。
RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等);
SOI:具有查询 sys 开头系统表的权限;
VTI:具有查询 v$开头的动态视图权限(动态视图记录在 v$dynamic_tables,如果没有此权
限,DM 管理工具上会报没有查询 v$视图权限)
DB_AUDIT_开头的角色是审计相关角色,具有审计相关权限,默认赋给 SYSAUDITOR。
DB_POLICY_开头的角色是安全相关角色,具有强制访问控制等权限,默认赋给 SYSSSO。
select * from dba_roles;
create role r1;
grant create table to r1;
grant select on dmhr.department to r1;
grant r1 to hrtest;
sp_set_role('R1',0) --角色禁用和启用,禁用后角色权限将不在生效。
DM 管理工具创建角色:
赋予对象权限增加 with grant option 说明权限可以转授,回收时要增加 cascade 关键字级联
回收权限,否则报错:
权限相关常见问题
DM 管理工具选择表,查看表信息报错(缺少 v$ciphers 视图的查询权限,可以使用 SYSDBA
给登录用户(如 dmtest)赋予 VTI 角色,或者单独给用户 v$ciphers 对象的查询权限)):