目录
1 用户管理
系统口令策略
创建用户
修改用户密码
用户锁定和解锁
删除用户
密码带有特殊字符的登录处理
SYSDBA 的密码忘记
用户资源限制
2 权限管理
创建角色
角色的禁用
权限/角色的分配
权限/角色的回收
权限转授
查看权限
3 模式管理
用户与模式的关系
创建模式
DM 默认的预定义用户:
SYS:系统内置用户,不允许登录。常用的数据字典表信息在该用户下。
SYSDBA:系统管理员,拥有几乎所有权限(除数据库审计和强制访问控制之外的权限)
SYSAUDITOR:系统审计管理员,具有审计相关权限。
SYSSSO:系统安全管理员,具有强制访问控制等权限;
SYSDBO:安全版本才有的用户,安全对象操作员。
PWD_POLICY 参数指定系统的口令策略,默认为 2(隐含参数,不在 dm.ini 中)只能通过函数或 SQL 语句修改。
系统支持的口令策略有:
⚫ 0无策略
⚫ 1禁止与用户名相同
⚫ 2口令长度需大于等于 INI 参数 PWD_MIN_LEN (默认为 9)设置的值
⚫ 4至少包含一个大写字母(A-Z)
⚫ 8至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by Dameng123 DEFAULT TABLESPACE TBSTEST;
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 15 BOTH;
SQL> create user hr identified by "dameng123";
create user hr identified by "dameng123";
第1 行附近出现错误[-2502]:密码不符合复杂度规则.
已用时间: 1.479(毫秒). 执行号:0.
SQL> show parameter pwd_policy
行号 PARA_NAME PARA_VALUE
---------- ---------- ----------
1 PWD_POLICY 12
SQL> alter system set 'PWD_POLICY'=7 both;
DMSQL 过程已成功完成
已用时间: 3.268(毫秒). 执行号:1005.
SQL> show parameter pwd_policy
行号 PARA_NAME PARA_VALUE
---------- ---------- ----------
1 PWD_POLICY 7
SQL> create user hr identified by Dameng123 default tablespace DMTBS;
操作已执行
已用时间: 48.019(毫秒). 执行号:1007.
SQL> alter user hr default tablespace dmhr;
操作已执行
已用时间: 17.306(毫秒). 执行号:1008.
SQL> alter user hr identified by "Dameng@123";
操作已执行
已用时间: 5.418(毫秒). 执行号:1009.
SQL>
create user hr IDENTIFIED by Dameng123 DEFAULT TABLESPACE TBSTEST;
修改用户的默认表空间:
alter user hr DEFAULT TABLESPACE dmhr;
alter user hr identified by "Dameng@123";
用户输入错误多次(默认 3 次),将会被锁定。
select * from dba_users;
select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID;
alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;
[dmdba@localhost ~]$ disql hr/xx:5238
[-2501]:用户名或密码错误.
disql V8
[dmdba@localhost ~]$ disql hr/xx:5238
[-2501]:用户名或密码错误.
disql V8
用户名:^C
[dmdba@localhost ~]$ disql hr/xx:5238
[-2501]:用户名或密码错误.
disql V8
用户名:^C
SQL> select b.USERNAME,a.FAILED_NUM,A.LOCKED_STATUS,A.LASTEST_LOCKED,A.FAILED_ATTEMPS from sysusers a,dba_users b where a.id=b.user_id;
行号 USERNAME FAILED_NUM LOCKED_STATUS LASTEST_LOCKED FAILED_ATTEMPS
---------- ---------- ----------- ------------- ------------------- --------------
1 SYS 0 2 NULL 0
2 DMTEST 3 2 NULL 0
3 HR 3 3 2024-06-19 10:30:12 4
4 HRTEST 3 2 NULL 0
5 SYSDBA 0 2 NULL 1
6 SYSAUDITOR 0 2 NULL 0
7 SYSSSO 0 2 NULL 0
7 rows got
drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --级联删除用户及用户下的对象信息,生产环境慎用
达梦中密码带有特殊字符需要双引号括起来,在 linux 系统下可以使用右斜杠\转义 。
disql dmoa/\"Dameng@123\"
SQL> alter user dmoa identified by "Dameng123@#'";
disql dmoa/\"Dameng123@#\'\"
1、用 ALTER USER 权限的其他用户登录数据库,重置 SYSDBA 的密码:
alter user sysdba identified by XXX;
2、数据库开启了操作系统认证(提前打开)
ENABLE_LOCAL_OSAUTH 参数(静态参数(隐含参数,不在 dm.ini 中),需要 DBA 权限 的用户修改,改后需重启数据库生效。)
基于操作系统的身份验证的准备工作:
1、需要在操作系统上创建4个用户组,分别为:dmdba、dmsso、dmauditor、dmusers,分别对应数据库中的SYSDBA、SYSSSO、SYSAUDITOR、普通用户。如果只是需要SYSDBA用户基于操作系统本地验证登录,则只需要创建dmdba组即可。
2、创建好用户组之后,需要将操作系统用户加入到对应的组。
SYSDBA用户:
执行登录的操作系统用户属于dmdba组(默认属组不能是dmdba)
disql / as sysdba
或者
disql /@ip:port as sysdba
SQL> show parameter enable_local_osauth;
行号 PARA_NAME PARA_VALUE
---------- ------------------- ----------
1 ENABLE_LOCAL_OSAUTH 0
SQL> alter system set 'ENABLE_LOCAL_OSAUTH'=1 spfile;
DMSQL 过程已成功完成
已用时间: 2.660(毫秒). 执行号:1017.
[dmdba@localhost DMDB]$ DmServiceDBSERVER restart
Stopping DmServiceDBSERVER: [ OK ]
Starting DmServiceDBSERVER: [ OK ]
SQL> show parameter enable_local_osauth
行号 PARA_NAME PARA_VALUE
---------- ------------------- ----------
1 ENABLE_LOCAL_OSAUTH 1
[dmdba@localhost DMDB]$ id dmdba
uid=2001(dmdba) gid=2001(dinstall) groups=2002(dmdba),2001(dinstall)
[dmdba@localhost DMDB]$ disql /:5238 as sysdba
服务器[LOCALHOST:5238]:处于普通打开状态
登录使用时间 : 4.972(ms)
disql V8
SQL>
用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
资源设置项,请参考:资源限制 | 达梦技术文档
SQL> alter user hr limit failed_login_attemps 5,password_lock_time 3;
操作已执行
已用时间: 21.392(毫秒). 执行号:1101.
password_lock_time的含义:
如果设置password_lock_time为3,超过FAILED_LOGIN_ATTEMPTS 设置值(5),用户会被锁定,被锁定的分钟数为3分钟,3分钟后hr用户可以正常登录。
使用 profile 管理用户资源限制
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;
SQL> create profile profile1 limit failed_login_attemps 5,password_lock_time 3,password_life_time 180;
操作已执行
已用时间: 9.828(毫秒). 执行号:1104.
SQL> alter user hr profile profile1;
操作已执行
已用时间: 9.361(毫秒). 执行号:1105.
SQL> 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;2 3 4
行号 PROFILEID PROFILE_NAME USERID USER_NAME
---------- ----------- ------------ ----------- ---------
1 469762148 PROFILE1 50331752 HR
已用时间: 0.404(毫秒). 执行号:1106.
SQL>
权限分为系统权限(数据库权限)和对象权限:
自主访问控制 | 达梦技术文档
系统权限:CREATE TABLE、SELECTTABLE 等对某一类对象的对象操作,对象定义权限。
对象权限:精确到某一个具体对象的查询/插入/更新/删除(表)、执行(函数或过程)等权限。
角色:角色是权限的集合
DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。
PUBLIC:具有对当前模式下对象的 DML 数据操作权限。
RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等);
SOI:具有查询 sys 开头系统表的权限;
VTI:具有查询 v$开头的动态视图权限(动态视图记录在 v$dynamic_tables,如果没有此权
限,DM 管理工具上会报没有查询 v$视图权限)
DB_AUDIT_开头的角色是审计相关角色,具有审计相关权限,默认赋给 SYSAUDITOR。
DB_POLICY_开头的角色是安全相关角色,具有强制访问控制等权限,默认赋给 SYSSSO。
create role r1;
grant create table to r1;
grant select on dmhr.department to r1;
grant r1 to hr;
--删除角色
--drop role r1;
sp_set_role('R1',0) --角色禁用和启用,禁用后角色权限将不在生效。0为禁用
SQL> select * from SYS.SYSOBJECTS a where a.name='R1';
行号 NAME ID SCHID TYPE$ SUBTYPE$ PID VERSION CRTDATE INFO1 INFO2 INFO3
---------- ---- ----------- ----------- ----- -------- ----------- ----------- -------------------------- ----------- ----------- --------------------
INFO4 INFO5 INFO6 INFO7 INFO8 VALID
-------------------- ---------- ---------- -------------------- ---------- -----
1 R1 67108965 0 UR ROLE 50331649 0 2024-06-19 13:33:56.167548 0 NULL NULL
NULL NULL NULL NULL NULL Y
已用时间: 0.799(毫秒). 执行号:1202.
SYSOBJECTS的VALID字段可以查看角色是否启用。
赋予数据库权限(系统权限):
SQL> grant create table to hr;
赋予对象权限:
SQL> grant select on dmhr.employee to hr;
赋予查询对象权限,精确到列
SQL> grant select (employee_id, employee_name) on dmhr.employee to hr;
SQL> revoke create table from hrtest;
SQL> revoke select on dmhr.employee from hrtest;
赋予对象权限增加 with grant option 说明权限可以转授,回收时要增加 cascade 关键字级联回收权限,否则报错。
revoke select on dmhr.employee from r2 CASCADE;
查看当前用户拥有的权限:
select * from session_privs;
相关数据字典:
select * from dba_sys_privs t where t.GRANTEE= 'HR';
select * from dba_role_privs t where t.GRANTEE= 'HR';
select * from dba_tab_privs t where t.GRANTEE= 'HR';
select * from dba_col_privs a where a.grantee='HR';
DM 默 认 不 能 授 予 用 户 在 其 他 模 式 下 数 据 定 义 ( DDL ) 的 权 限 , 由 参 数 ENABLE_DDL_ANY_PRIV 指定,默认为 0。
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --开启后可正常赋予权限
grant create any table to hrtest;
模式(Schema)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、视图、索引和权限定义等的对象。
当系统建立一个用户时,会自动生成一个同名的模式
用户还可以建立其他模式,DM 中用户和模式是一对多的关系,一个用户可以拥有多个模式,一个模式仅能归属于一个用户。Oracle 中用户和模式是一对一的关系。
select * from SYSOBJECTS t where t."TYPE$" ='SCH'; --查看模式
select * from SYSOBJECTS t where t."SUBTYPE$" ='USER'; --查看用户
--查询模式和用户的对应关系:
select a.id scheid, a.name schename, b.id userid, b.name username
from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b
where a."TYPE$" = 'SCH' and a.pid = b.id;
SQL> select a.id scheid, a.name schename, b.id userid, b.name username
from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b
where a."TYPE$" = 'SCH' and a.pid = b.id;2 3
行号 SCHEID SCHENAME USERID USERNAME
---------- ----------- ---------- ----------- --------
1 150994944 SYS 50331648 SYS
2 150994948 CTISYS 50331648 SYS
3 150994945 SYSDBA 50331649 SYSDBA
4 150995944 RESOURCES 50331649 SYSDBA
5 150995945 PERSON 50331649 SYSDBA
6 150995946 SALES 50331649 SYSDBA
7 150995947 PRODUCTION 50331649 SYSDBA
8 150995948 PURCHASING 50331649 SYSDBA
9 150995949 OTHER 50331649 SYSDBA
10 150995950 DMHR 50331649 SYSDBA
11 150995952 SYSJOB 50331649 SYSDBA
行号 SCHEID SCHENAME USERID USERNAME
---------- ----------- ---------- ----------- ----------
12 150994946 SYSAUDITOR 50331650 SYSAUDITOR
13 150994947 SYSSSO 50331651 SYSSSO
14 150995951 DMTEST 50331748 DMTEST
15 150995953 HRTEST 50331749 HRTEST
16 150995955 HR 50331752 HR
16 rows got
已用时间: 0.842(毫秒). 执行号:702.
--创建模式
create schema hrtest01 AUTHORIZATION HR;
/
create table hrtest01.t_test(id int, name varchar(20));
--查看当前模式和当前用户
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER'); 或
select user;
--切换模式(仅对当前会话生效)
set SCHEMA dmhr;
--如果创建的schema已经存在且属于其他用户,会报错
SQL> create schema hrtest AUTHORIZATION HR;
2 /
create schema hrtest AUTHORIZATION HR;
[-2103]:无效的模式名[HRTEST].
已用时间: 0.576(毫秒). 执行号:0.
SQL> create schema hrtest01 authorization hr;
2 /
操作已执行
已用时间: 6.418(毫秒). 执行号:710.
达梦技术社区:https://eco.dameng.com/