一、用户管理
DM 数据库采用“三权分立”或“四权分立”的安全机制,将系统中所有的权限按照类 型进行划分,为每个管理员分配相应的权限,管理员之间的权限相互制约又相互协助,从而 使整个系统具有较高的安全性和较强的灵活性。
可在创建 DM 数据库时通过建库参数 PRIV_FLAG 设置使用“三权分立”或“四权分立”安全机制,0 表示“三权分立”,1 表示“四权分立”。此参数仅在 DM 安全版本下提供, 即仅 DM 安全版本提供“四权分立”安全机制,缺省采用“三权分立”安全机制。
1.1、用户创建介绍
创建用户的操作一般只能由系统预设用户 SYSDBA、SYSSSO 和 SYSAUDITOR 完成, 如果普通用户需要创建用户,必须具有 CREATE USER 的数据库权限。
创建用户的命令是 CREATE USER,创建用户所涉及的内容包括为用户指定用户名、认 证模式、口令、口令策略、空间限制、只读属性以及资源限制。其中用户名是代表用户账号的标识符,长度为 1~128 个字符。用户名可以用双引号括起来,也可以不用,但如果用户名以数字开头,必须用双引号括起来
1.2、用户创建常用语法
1.1.1、语法格式
CREATE USER <用户名>IDENTIFIED<身份验证模式> [PASSWORD_POLICY <口令策略>][<锁定子
句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许 IP 子句>][<禁止 IP
子句>][<允许时间子句>][<禁止时间子句>][< TABLESPACE 子句>];
<身份验证模式> ::= <数据库身份验证模式>|<外部身份验证模式>
<数据库身份验证模式> ::= BY <口令>[<散列选项>]
<散列选项> ::= HASH WITH [<密码引擎名>.]<散列算法> [<加盐选项>]
<散列算法> ::= MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512
<加盐选项> ::= [NO] SALT
<外部身份验证模式> ::= EXTERNALLY | EXTERNALLY AS <用户 DN>
<口令策略> ::= 口令策略项的任意组合
<锁定子句> ::= ACCOUNT LOCK | ACCOUNT UNLOCK
<存储加密密钥> ::= ENCRYPT BY <口令>
<空间限制子句> ::= DISKSPACE LIMIT <空间大小>| DISKSPACE UNLIMITED
<只读标志> ::= READ ONLY | NOT READ ONLY
<资源限制子句> ::= DROP PROFILE |
PROFILE <profile 名> |
[LIMIT <资源设置>]
<资源设置> ::= <资源设置项>{,<资源设置项>} |
<资源设置项>{ <资源设置项>}
<资源设置项> ::= SESSION_PER_USER <参数设置>|
CONNECT_IDLE_TIME <参数设置>|
CONNECT_TIME <参数设置>|
CPU_PER_CALL <参数设置>|
CPU_PER_SESSION <参数设置>|
MEM_SPACE <参数设置>|
READ_PER_CALL <参数设置>|
READ_PER_SESSION <参数设置>|
FAILED_LOGIN_ATTEMPS <参数设置>|
PASSWORD_LIFE_TIME <参数设置>|
PASSWORD_REUSE_TIME <参数设置>|
PASSWORD_REUSE_MAX <参数设置>|
PASSWORD_LOCK_TIME <参数设置>|
PASSWORD_GRACE_TIME <参数设置>
<参数设置> ::=<参数值>| UNLIMITED| DEFAULT
<允许 IP 子句> ::= ALLOW_IP <IP 项>{,<IP 项>}
<禁止 IP 子句> ::= NOT_ALLOW_IP <IP 项>{,<IP 项>}
<IP 项> ::= <具体 IP>|<网段>
<允许时间子句> ::= ALLOW_DATETIME <时间项>{,<时间项>}
<禁止时间子句> ::= NOT_ALLOW_DATETIME <时间项>{,<时间项>}
<时间项> ::= <具体时间段> | <规则时间段>
<具体时间段> ::= <具体日期><具体时间> TO <具体日期><具体时间>
<规则时间段> ::= <规则时间标志><具体时间> TO <规则时间标志><具体时间>
<规则时间标志> ::= MON | TUE | WED | THURS | FRI | SAT | SUN
<TABLESPACE 子句> ::=DEFAULT TABLESPACE <表空间名>
1.1.2、口令策略
用户口令最长为 48 字节,创建用户语句中的 PASSWORD POLICY 子句用来指定该用
户的口令策略,系统支持的口令策略有:
l 0 无策略
l 1 禁止与用户名相同
l 2 口令长度不小于 9
l 4 至少包含一个大写字母(A-Z)
l 8 至少包含一个数字(0-9)
l 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
--查询当前数据库口令策略,默认是2
SQL> SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION DEFAULT_VALUE ISDEFAULT
---------- ----------- ---------- ---- ----- --------- ---------- ----------------------- ------------- -----------
1 463 PWD_POLICY SYS 2 2 2 Flag of password policy 2 1
--修改口令策略
例如,将 PWD_POLICY 置为 8,同时修改文件和内存参数,由于 PWD_POLICY 为动态INI 参数,这样设置后新的参数值可以立即生效。
--调用过程进行修改,1代表的是both,2代表spfile
SQL> SP_SET_PARA_VALUE(1, 'PWD_POLICY',8);
DMSQL 过程已成功完成
已用时间: 4.663(毫秒). 执行号:455.
--修改完查询结果
SQL> SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION DEFAULT_VALUE ISDEFAULT
---------- ----------- ---------- ---- ----- --------- ---------- ----------------------- ------------- -----------
1 463 PWD_POLICY SYS 8 8 8 Flag of password policy 2 0
已用时间: 9.210(毫秒). 执行号:456.
1.1.3、资源限制
用户的资源限制管理有两种方式:
方式一,将用户关联到某个已存在的 PROFILE 对象上,之后用户的资源限制由关联的 PROFILE 统一管理配置,且无法再使用方式二中的 LIMIT <资源设置>设置资源设置项。
方式二,未关联 PROFILE 的用户使用 LIMIT <资源设置>设置资源设置项。 新建用户默认使用方式二管理资源设置,在关联到 PROFILE 时,之前已设置的资源限制项会立即失效。
资源设置项 | 说明 | 最大值 | 最小值 | 缺省值 |
SESSION_PER_USER | 在一个实例中,一个用户可以同时拥有的会话数量 | 32768 | 1 | 安全版本中默认值为 4096;其他版本中默认值为系统所能提供的最大值 |
CONNECT_TIME | 一个会话连接、访问和操作数据库服务器的时间上限(单位:1 分钟) | 1440 (1 天) | 1 | 无限制 |
CONNECT_IDLE_TIME | 会话最大空闲时间(单位:1 分 钟) | 1440 (1 天) | 1 | 无限制 |
FAILED_LOGIN_ATTEMPS | 将引起一个账户被锁定的连续注 册失败的次数 | 100 | 1 | 3 |
CPU_PER_SESSION | 一个会话允许使用的 CPU 时间 上限(单位:秒) | 31536000 (365 天) | 1 | 无限制 |
CPU_PER_CALL | 用户的一个请求能够使用的 CPU 时间上限(单位:秒) | 86400 (1 天) | 1 | 无限制 |
READ_PER_SESSION | 会话能够读取的总数据页数上限 | 2147483646 | 1 | 无限制 |
READ_PER_CALL | 每个请求能够读取的数据页数 | 2147483646 | 1 | 无限制 |
MEM_SPACE | 会话占有的私有内存空间上限 (单位:MB) | 2147483647 | 1 | 无限制 |
PASSWORD_LIFE_TIME | 一个口令在其终止前可以使用的天数 | 365 | 1 | 无限制 |
PASSWORD_REUSE_TIME | 一个口令在可以重新使用前必须经过的天数 | 365 | 1 | 无限制 |
PASSWORD_REUSE_MAX | 一个口令在可以重新使用前必须改变的次数 | 32768 | 1 | 无限制 |
PASSWORD_LOCK_TIME | 如果超过FAILED_LOGIN_ATTEMPS 设置 值,一个账户将被锁定的分钟数 | 1440 (1 天) | 1 | 1 |
PASSWORD_GRACE_TIME | 以天为单位的口令过期宽限时 间,过期口令超过该期限后,禁 止执行除修改口令以外的其他操作 | 30 | 1 | 10 |
1.1.4、创建用户
--创建用户失败的登录次数达到3次被锁定5分钟
SQL> create user test identified by test123456 limit failed_login_attemps 3, password_lock_time 5;
操作已执行
已用时间: 132.451(毫秒). 执行号:459.
SQL>
--创建用户在30天内修改过5次后,才能重新使用过去口令
SQL> create user test2 identified by test2123456 limit password_reuse_time 30, password_reuse_max 5;
操作已执行
已用时间: 112.136(毫秒). 执行号:460.
--创建允许的IP段和工作时间段可以访问的用户
SQL> create user test3 identified by test3123456 allow_ip "192.168.10.*" allow_datetime mon "8:30:00" to fri "17:30:00";
操作已执行
已用时间: 75.151(毫秒). 执行号:461.
--创建允许具体IP和具体时间可以访问的用户
SQL> create user test4 identified by test4123456 allow_ip "192.168.10.100" allow_datetime "2022-6-21" "8:30:00" to "2022-6-22" "17:30:00";
操作已执行
已用时间: 70.991(毫秒). 执行号:462.
SQL>
1.1.5、修改用户
ALTER USER <用户名> [IDENTIFIED <身份验证模式>][PASSWORD_POLICY <口令策略>][<锁定子 句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许 IP 子句>][<禁止 IP 子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE 子句>][<SCHEMA 子句>];
例子:
--修改用户的资源属性,登录失败5次锁定时间5分钟,口令终止前可以使用30天,最大宽限时间30天,超过只能修改口令,不允许其他操作
SQL> alter user test identified by test123456 limit failed_login_attemps 5, password_lock_time 5, password_life_time 30, password_grace_time 30;
操作已执行
已用时间: 38.130(毫秒). 执行号:0.
SQL>
--修改用户的默认表空间
SQL> select file_name, tablespace_name from dba_data_files;
行号 FILE_NAME TABLESPACE_NAME
---------- ----------------------------- ---------------
1 +DMDATA/data/dsc/system.dbf SYSTEM
2 +DMDATA/data/dsc/test3_02.dbf TEST3
3 +DMDATA/data/dsc/test3_01.dbf TEST3
4 +DMDATA/data/dsc/DTS_TEST.dbf DTS_TEST
5 +DMDATA/data/dsc/test.dbf TEST
6 +DMDATA/data/dsc/main.dbf MAIN
7 +DMDATA/data/dsc/TEMP0.DBF TEMP
8 +DMDATA/data/dsc/roll.dbf ROLL
8 rows got
已用时间: 16.083(毫秒). 执行号:1.
SQL>
SQL> alter user test default tablespace test default index tablespace test;
操作已执行
已用时间: 11.345(毫秒). 执行号:2.
SQL>
SQL> select username, user_id, default_tablespace from dba_users where username in ('TEST','TEST2','TEST3','TEST4');
行号 USERNAME USER_ID DEFAULT_TABLESPACE
---------- -------- ----------- ------------------
1 TEST3 50331753 MAIN
2 TEST 50331751 TEST
3 TEST4 50331754 MAIN
4 TEST2 50331752 MAIN
已用时间: 39.811(毫秒). 执行号:4.
SQL>
1.1.6、删除用户
DROP USER [IF EXISTS] <用户名> [RESTRICT | CASCADE];
指定 IF EXISTS 关键字后,删除不存在的用户时不会报错,否则会报错。
如果在删除用户时未使用 CASCADE 选项(缺省使用 RESTRICT 选项),若该用户建立了数据库对象,DM 将返回错误信息,而不删除此用户。
如果在删除用户时使用了 CASCADE 选项,除数据库中该用户及其创建的所有对象被删
除外,若其他用户创建的对象引用了该用户的对象,DM 还将自动删除相应的引用完整性约
束及依赖关系。
--删除用户t1
SQL> drop user test cascade;
操作已执行
已用时间: 503.633(毫秒). 执行号:5.
二、权限管理
2.1权限管理
用户权限有两类:数据库(系统)权限和对象权限。数据库权限主要是指针对数据库对象的创建、删除、修改的权限,对数据库备份等权限。而对象权限主要是指对数据库对象中的数据的访问权限。数据库权限一般由SYSDBA、SYSAUDITOR和SYSSSO指定,也可以由具有特权的其他用户授予。对象权限一般由数据库对象的所有者授予用户,也可由SYSDBA用户指定,或者由具有该对象权限的其他用户授权。
2.1.1数据库权限
常用数据库权限如下:
CREATE SESSION: 创建会话的权限,新建用户默认具有此权限
CREATE VIEW: 在自己的模式中创建视图的权限
CREATE USER: 创建用户的权限
CREATE TRIGGER: 在自己的模式中创建触发器的权限
ALTER USER: 修改用户的权限
ALTER DATABASE: 修改数据库的权限
CREATE TABLE:创建表
CREATE ANY TABLE:在任意模式下创建表
ALTER ANY TABLE:修改任意表
DROP ANY TABLE:删除任意表
INSERT TABLE:插入表记录
INSERT ANY TABLE:向任意表插入记录
UPDATE TABLE:更新表记录
UPDATE ANY TABLE:更新任意表的记录
DELETE TABLE:删除表记录
DELETE ANY TABLE:删除任意表的记录
SELECT ANY TABLE:查询任意表的记录
REFERENCES TABLE:引用表
REFERENCES ANY TABLE:引用任意表
DUMP TABLE:导出表
DUMP ANY TABLE:导出任意表
GRANT TABLE:向其他用户进行表上权限的授权
GRANT ANY TABLE:向其他用户进行任意表上权限的授权
--存储程序对象,其相关的数据库权限则包括:
CREATE PROCEDURE:创建存储程序
CREATE ANY PROCEDURE:在任意模式下创建存储程序
DROP PROCEDURE:删除存储程序
DROP ANY PROCEDURE:删除任意存储程序
EXECUTE PROCEDURE:执行存储程序
EXECUTE ANY PROCEDURE:执行任意存储程序
GRANT PROCEDURE:向其他用户进行存储程序上权限的授权
GRANT ANY PROCEDURE:向其他用户进行任意存储程序上权限的授权
2.1.2预定义角色
DBA 类型对应 DBA、RESOURCE、PUBLIC、VTI、SOI 预定义角色
1) 新建的用户默认只有create session的权限,即只能连接数据库无法进行任何操作。
2) SOI具有系统表的查询权限,即SYS模式下SYS开头的数据字典表。
3) VTI具有系统动态视图的查询权限,即SYS模式下V$开头的视图。
4) PUBLIC不可以创建数据库对象,即相较RESOURCE没有CREATE权限,有绝大多数数据库权限。
5) RESOURCE可以创建数据库对象,但只能在对应模式下创建、修改对象等,有绝大多数数据库权限。
6) DBA具有数据库系统中对象与数据操作的最高权限集合,比REOUSRCE多了CREATE ANY、ALTER ANY、DROP ANY等跨模式的权限操作,也可认为在最高层级进行数据库整体结构的修改。
AUDITOR 对应 DB_ADUTI_ADMIN、DB_AUDIT_OPER、DB_AUDIT_PUBLIC、DB_AUDIT_VTI、DB_AUDIT_SOI 预定义角色;
SSO 对应 DB_POLICY_ADMIN、DB_POLICY_OPER、DB_POLICY_PUBLIC、 DB_POLICY_VTI、DB_POLICY_SOI 预定义角色;
DBO 对应 DB_OBJECT_ADMIN、DB_OBJECT_OPER、DB_OBJECT_PUBLIC、 DB_OBJECT_VTI、DB_OBJECT_SOI 预定义角色。
2.1.3角色的创建
具有“CREATE ROLE”数据库权限的用户也可以创建新的角色,其语法如下:
CREATE ROLE <角色名>;
使用说明:
1. 创建者必须具有 CREATE ROLE 数据库权限;
2. 角色名的长度不能超过 128 个字符;
3. 角色名不允许和系统已存在的用户名重名;
4. 角色名不允许是 DM 保留字
创建角色role_test,并赋予查询test.test表的权限
SQL> create role role_test;
操作已执行
已用时间: 64.407(毫秒). 执行号:300.
SQL> grant select on test.test to role_test;
操作已执行
已用时间: 65.337(毫秒). 执行号:301.
SQL>
2.1.4角色的删除
具有“DROP ROLE”权限的用户可以删除角色,其语法如下:
DROP ROLE [IF EXISTS] <角色名>;
即使已将角色授予了其他用户,删除这个角色的操作也将成功。此时,那些之前被授予 该角色的用户将不再具有这个角色所拥有的权限,除非用户通过其他途径也获得了这个角色所具有的权限。
--删除角色role_test
SQL> drop role role_test;
操作已执行
已用时间: 70.549(毫秒). 执行号:600.
2.1.5、角色的禁用与启用
使用 DM 系统过程 SP_SET_ROLE 来设置这个角色为不可用,将第二参数置为 0 表示禁用角色。
例如,下面的语句将角色 TEST_ROLE 禁用。
SP_SET_ROLE('TEST_ROLE', 0);
例如,下面的语句将启用角色 TEST_ROLE。
SP_SET_ROLE(' TEST_ROLE ', 1);
使用说明:
1. 只有拥有 ADMIN_ANY_ROLE 权限的用户才能启用和禁用角色,并且设置后立即生效;
2. 凡是包含禁用角色 A 的角色 M,M 中禁用的角色 A 将无效,但是M 仍有效;
3. 系统预设的角色是不能设置的,如:DBA、PUBLIC、RESOURCE。
2.1.6、查看指定用户的权限
查看指定用户拥有的所有权限(系统权限、对象权限、角色),分别是通过dba_sys_privs,dba_tab_privs,dba_role_privs三个视图来查看。
SQL> select * from dba_sys_privs where grantee='SYSDBA';
行号 GRANTEE PRIVILEGE ADMIN_OPTION
---------- ------- -------------- ------------
1 SYSDBA CREATE SESSION YES
已用时间: 3.222(毫秒). 执行号:602.
SQL> select * from dba_tab_privs where grantee='SYSDBA';
行号 GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
---------- ------- ----- ----------- ------- --------- --------- ---------
1 SYSDBA SYS DBMS_XMLGEN SYS EXECUTE NO NO
已用时间: 9.774(毫秒). 执行号:603.
SQL> select * from dba_role_privs where grantee='SYSDBA';
行号 GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
---------- ------- ------------ ------------ ------------
1 SYSDBA DBA Y NULL
2 SYSDBA RESOURCE Y NULL
3 SYSDBA PUBLIC Y NULL
4 SYSDBA SYS_ADMIN N NULL
5 SYSDBA SOI Y NULL
已用时间: 3.313(毫秒). 执行号:604.
SYSDBA拥有下述权限:
(1)create session的系统权限
(2)执行DMBS_XMLGEN系统包的对象权限
(3)DBA、RESOURCE、PUBLIC、SYS_ADMIN、SOI的角色权限
达梦云适配技术社区
https://eco.dameng.com/