本文于 100 天前发布,最后更新于 87 天前
一、用户管理
用户是操作者的一个身份。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 即可。
案例
(1)指定系统口令策略:包含大写字母,包含数字,长度大于 9。
SELECT * FROM V$DM_INI WHERE PARA_NAME = 'PWD_MIN_LEN';
INI 参数 PWD_MIN_LEN 默认即 9。
所以只需要设置 PWD_POLICY=2+4+8=14 即可
SP_SET_PARA_VALUE(1, 'PWD_POLICY', 14); --或者 ALTER SYSTEM SET 'PWD_POLICY'=14 BOTH;
(2)创建用户时指定密码策略。
CREATE USER "XXX" IDENTIFIED BY "XXXXXXXXX" PASSWORD_POLICY 2 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;
(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.PWD_POLICY "密码策略", S.ALLOW_ADDR "允许的IP地址", S.NOT_ALLOW_ADDR "不允许的IP地址" FROM DBA_USERS D JOIN SYSUSERS S ON D.USER_ID=S.ID;
(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