已索引
预定义用户
SYS:系统内置管理员,不允许登录,缺省数据字典和动态视图OWNER。
SYSDBA:系统管理员(管理用户),缺省系统管理员和数据库管理员,拥有几乎所有权限(除审计和强制访问控制)
SYSAUDITOR:系统审计员(审计用户),缺省系统审计管理员和数据库审计管理员,具有审计相关权限。
SYSSSO:系统安全员(安全用户),缺省系统标记管理员和数据库标记管理员,具有强制访问控制等权限。
SYSDBO:安全版本才有的用户,安全操作员。
ENABLE_LOCAL_OSAUTH
密码复杂度策略
PWD_POLICY 参数指定系统的口令策略(默认为 2),该参数是一个隐藏参数,在dm.ini和console中是看不到的,可以通过 v$parameter 查看,只能通过函数或者alter system 修改。系统支持的口令策略有:
- 0 无策略
- 1 禁止与用户名相同
- 2 口令长度不小于 9
- 4 至少包含一个大写字母(A-Z)
- 8 至少包含一个数字(0-9)
- 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
密码带有特殊字符的登录处理:
SQL> alter user hrtest IDENTIFIED by "Dameng@123";
SQL> conn hrtest/"Dameng@123"
$ disql hrtest/'"Dameng@123"'
密码管理策略
用户输入错误多次(默认 3 次),将会被锁定。
用户密码管理策略设置(DM 新版本已经支持使用 profile 来管理用户的密码管理策略):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
select * from dba_users;
select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID; `为什么要做连接?`
创建用户
create tablespace nscfs_tbs datafile 'nscfs_tbs01.dbf' size 1024 autoextend on next 2 maxsize 30720; [CACHE=NORMAL|"KEEP"]; -- 单位为M,不能指定单位。
create user nscfs IDENTIFIED by xxxx DEFAULT TABLESPACE NSCFSTBS; [DISKSPACE LIMIT 1024|unlimited];
grant VTI to nscfs;
grant SOI to nscfs;
grant resource to nscfs;
用户创建后,默认就会有 create session 的系统权限和 PUBLIC 角色。如果是图形界面创建的用户,还会自动分配:VTI 和 SOI 角色。
一般我们创建用户后,还需要给用户 resource 角色。
修改用户的默认表空间
alter user hr DEFAULT TABLESPACE dmtbs;
删除用户
drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --生成环境慎用
用户锁定和解锁
alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;
用户权限查询与分配
相关数据字典:
select * from dba_sys_privs t where t.GRANTEE= 'DMTEST';
select * from dba_tab_privs t where t.GRANTEE= 'DMTEST';
select * from dba_role_privs t where t.GRANTEE= 'DMTEST';
分配对象权限:
grant select (employee_id, employee_name) on dmhr.employee to hrtest;
分配系统权限:
grant select any table to hrtest;
DM 默认不能授予用户在其他模式下数据定义( DDL )的权限,由参数 ENABLE_DDL_ANY_PRIV 指定,默认为 0。
select * from v$parameter t where name like '%ENABLE_DDL_ANY_PRIV%';
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --开启后可正常赋予权限
grant create any table to hrtest;
grant create any index to hrtest;
角色管理
角色是权限的集合,角色使权限管理更加方便。
DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。
PUBLIC:具有对当前模式下对象的 DML 数据操作权限。
RESOURCE:具有在当前模式下数据定义权限(创建表、索引、视图等),
SOI:具有查询 sys 开头系统表的权限
VTI:具有查询 v$开头的动态视图权限,若不给,用户在“右击表名 > 修改”时,报 5504 错误:没有 [SYS.V$CIPHERS]对象的查询权限
sp_set_role('R1',0) --角色禁用和启用,禁用后角色权限将不在生效。
dba ---> cy ----> cfop
则,只有 cy 能回收 cfop 的权限, dba 要回收 cy 的权限时,不加 cascasde会报错。
模式管理
模式归属用户。
当系统建立一个用户时,会自动生成一个对应的模式。
用户还可以建立其他模式,用户和模式是一对多的管理,一个用户可以拥有多个模式,一个模式仅能归属于一个用户。
--查看模式
select t.* from SYSOBJECTS t where t."TYPE$" ='SCH';
`SYSOBJECTS 与 dba_objects 有什么区别?`
--查看用户
select t.* from SYSOBJECTS t where t."SUBTYPE$" ='USER';
--查看模式和用户的关系
select a.id as schema_id, a.name as schema_name, b.id as user_id, b.name as user_name
from SYSOBJECTS a, SYSOBJECTS b
where a.pid = b.id and a."TYPE$" = 'SCH';
这儿的pid 是用户id
--创建模式
create schema hrtest01 AUTHORIZATION HRTEST;
create table hrtest01.t_test(id int, name varchar(20));
--查看当前模式和当前用户
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER');
--切换模式(只针对当前会话生效)
set SCHEMA dmhr;
--删除模式
drop SCHEMA IF EXISTS HRTEST01;
drop SCHEMA IF EXISTS HRTEST01 CASCADE; --级联删除模式下对象,生产环境慎用。
默认模式不能删除。是否可以修改?