达梦数据库系列—4.用户权限管理

目录

1 用户管理

系统口令策略

创建用户

修改用户密码 

用户锁定和解锁

删除用户

密码带有特殊字符的登录处理

SYSDBA 的密码忘记

用户资源限制

2 权限管理

创建角色

角色的禁用

权限/角色的分配

权限/角色的回收

权限转授

查看权限

3 模式管理

用户与模式的关系

创建模式


1 用户管理

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@#\'\"

SYSDBA 的密码忘记

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> 

2 权限管理

权限分为系统权限(数据库权限)和对象权限:

自主访问控制 | 达梦技术文档

系统权限: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;

3 模式管理

模式(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/

你可能感兴趣的:(达梦,数据库,oracle)