一、用户管理
用户是操作者的一个身份。DM 预定义用户:
- SYS:系统内置用户,不能直接登录。
- SYSDBA:数据库管理员,拥有 DBA 角色。
- SYSAUDITOR:数据库审计管理员。
- SYSSSO:数据库安全管理员,拥有强制访问控制等权限。
- SYSDBO:安全版本才有此用户,对象操作员。
PWD_POLICY 系统口令策略【旧】:
- 0 无限制。但总长度不得超过 48 个字节
- 1 禁止与用户名相同
- 2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值
- 4 至少包含一个大写字母(A-Z)
- 8 至少包含一个数字( 0 – 9)
- 16 至少包含一个标点符号(英文输入法状态下,除”和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
PWD_POLICY 系统口令策略【新】:
设置系统缺省口令策略。取值:15、31。
15:禁止与用户名相同、口令长度需大于等于 INI 参数PWD_MIN_LEN设置的值、须同时包含大写字母(A~Z)和小写字母(A-Z)、至少包含一个数字(0-9);
31:除了取值 15 的策略外,还要求至少包含一个标点符号(英文输入法状态下,除“ 和空格外的所有符号)。
DMINIT 工具中 SYSDBA_PWD、SYSAUDITOR_PWD、SYSSSO_PWD、SYSDBO_PWD 使用的口令策略,请参考 PWD_POLICY 为 15。
案例
(1)指定系统口令策略:包含大写字母,包含数字,长度大于 9。
SELECT * FROM V$DM_INI WHERE PARA_NAME = 'PWD_MIN_LEN';
INI 参数 PWD_MIN_LEN 默认即 9。
所以只需要设置 PWD_POLICY=2+4+8=14 即可【旧,新版只支持15或31】
SP_SET_PARA_VALUE(1, 'PWD_POLICY', 14);
--或者
ALTER SYSTEM SET 'PWD_POLICY'=14 BOTH;
(2)创建用户时指定密码策略。
CREATE USER "XXX" IDENTIFIED BY "XXXXXXXXX" PASSWORD_POLICY 31 DEFAULT TABLESPACE "TBS" DEFAULT INDEX TABLESPACE "TBS";
(3)创建/解除PROFILE管理用户资源限制
CREATE PROFILE "PROFILE-TEST" LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3, SESSION_PER_USER 10;
ALTER USER "TEST" PROFILE "PROFILE-TEST";
配置后TEST用户资源限制即PROFILEZ中的资源限制。
解除PROFILE资源限制,改为默认;并删除PROFILE文件。
ALTER USER "TEST" PROFILE DEFAULT;
DROP PROFILE "PROFILE-TEST";
(4)用户的锁定与解锁
ALTER USER "TEST" ACCOUNT LOCK;
ALTER USER "TEST" ACCOUNT UNLOCK;
(5)直接使用LIMIT子句限制用户资源
示例:
ALTER USER "TEST" LIMIT FAILED_LOGIN_ATTEMPS 4, PASSWORD_LOCK_TIME 2, SESSION_PER_USER 5;
节点最大会话数
alter user TEST limit SESSION_PER_USER 100;
全局最大会话数
alter user TEST limit GLOBAL_SESSION_PER_USER 100;
会话空闲期【用户会话的最大空闲时间,1~1440分钟】
alter user TEST limit CONNECT_IDLE_TIME 360;
会话持续期【1~1440分钟】
alter user TEST limit CONNECT_TIME 360;
登录失败次数【1~100】
alter user TEST limit FAILED_LOGIN_ATTEMPS 5;
口令有效期【1~365天】
alter user TEST limit PASSWORD_LIFE_TIME 90;
口令等待期【一个口令在可以重新使用之前必须经过的天数】
alter user TEST limit PASSWORD_REUSE_TIME 90;
口令变更次数【一个口令在可以重新使用前必须改变的次数】
alter user TEST limit PASSWORD_REUSE_MAX 3;
口令锁定期【1~1440分钟】
alter user TEST limit PASSWORD_LOCK_TIME 30;
口令宽限期【用户口令过期后的宽限时间】
alter user TEST limit PASSWORD_GRACE_TIME 30;
会话使用CPU时间【秒】
alter user TEST limit CPU_PER_SESSION 259200;
请求使用CPU时间【秒】
alter user TEST limit CPU_PER_CALL 259200;
会话读取页数
alter user TEST limit READ_PER_SESSION 3072;
请求读取页数
alter user TEST limit READ_PER_CALL 3072;
会话私有内存
alter user TEST limit MEM_SPACE 10240;
(6)查询用户的资源限制
SELECT D.USERNAME "用户名" ,
D.ACCOUNT_STATUS "账号状态" ,
D.DEFAULT_TABLESPACE "表空间" ,
S.SESS_PER_USER "会话限制" ,
S.CONN_IDLE_TIME "用户会话的最大空闲时间",
S.FAILED_NUM "尝试登录次数" ,
S.LIFE_TIME "口令有效期" ,
S.LOCK_TIME "锁定时间" ,
S.GRACE_TIME "口令过期后的宽限时间",
S.PWD_POLICY "密码策略",
S.ALLOW_ADDR "允许的IP地址",
S.NOT_ALLOW_ADDR "不允许的IP地址"
FROM DBA_USERS D
JOIN SYSUSERS S
ON D.USER_ID=S.ID
WHERE D.USERNAME NOT IN ('SYSDBA','SYS','SYSSSO','SYSAUDITOR');
(7)删除用户
DROP USER IF EXISTS "TEST";
DROP USER IF EXISTS "TEST" CASCADE;--级联删除
二、权限管理
权限包含:系统权限和对象权限。
系统默认角色
- VTI:系统动态视图(V$开头)的查询权限
- SOI:系统表(SYS开头的表)的查询权限
- SVI:新版新增
注意:视图V$DYNAMIC_TABLES记录着所有的系统动态视图
案例
(1)赋予创建表、创建索引、创建视图的权限
GRANT CREATE TABLE, CREATE INDEX, CREATE VIEW TO "TEST";
(2)注意:在赋予更新或删除某个表数据权限时,如果该用户没有对应表的查询权限,那么在赋予权限后,执行UPDATE或者DELETE会报错。
GRANT UPDATE, DELETE ON DMHR.EMPLOYEE TO "TEST";
[dmdba@centos-dm bin]$ ./disql TEST/dameng123:5236
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 10.383(ms)
disql V8
SQL> DELETE FROM DMHR.EMPLOYEE WHERE EMPNO='3333';
DELETE FROM TEST.EMPLOYEES WHERE EMPNO='3333';
[-5504]:没有[EMPLOYEE]对象的查询权限.
已用时间: 1.292(毫秒). 执行号:0.
三、角色管理
- 角色是一组权限的集合。
- 角色使权限管理更加方便。
- 依赖于业务需要。
- 创建角色赋予用户才有意义。
创建角色
CREATE ROLE "XXX";
角色可以禁用,默认创建后是启用状态,一旦角色禁用,则其权限将不再生效。
案例
(1)创建角色并赋予TEST用户
CREATE ROLE "ROLEDM";
GRANT SELECT ON TEST.DEPARTMENTS TO "ROLEDM";
GRANT SELECT ON DMHR.DEPARTMENTS TO "ROLEDM";
GRANT "ROLEDM" TO "TEST";
(2)角色禁用
SELECT * FROM V$IFUN WHERE NAME LIKE '%ROLE%';
--查看角色相关的方法,可知禁用角色的方法为SP_SET_ROLE,0 为禁用,1 为启用。
--例如
SP_SET_ROLE('ROLEDM', 0);
(3)查看用户所拥有的角色
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '用户名';
SELECT * FROM USER_ROLE_PRIVS; --查询当前用户角色
(4)查询默认角色的权限
SELECT * FROM SYS.DBA_SYS_PRIVS WHERE GRANTEE IN ('PUBLIC','RESOURCE','DBA');
四、相关数据字典
- DBA_USERS
- DBA_PROFILES
- SYSUSERS
- DBA_ROLE_PRIVS
- USER_ROLE_PRIVS
- V$IFUN