12.1 用户与模式的关系
sysdba sysoper
sysdba不仅具备所有sysoper的所有权限,而且还可以建立数据库,执行不完全恢复

12.2 创建和管理用户
12.2.1 身份验证
三种验证方法:
1、密码验证(最常用)
2、外部验证
3、全局验证

12.2.2 创建用户
语法格式:
create user user_name identified by pass_word
[or identified exeternally]
[or identified globally as 'CN=user']
[default tablespace tablespace_name]
[temporary tablespace tablespace_name]
[quota [integer k[m]][unlimited] on tablespace_specify1,
 quota [integer k[m]][unlimited] on tablespace_specify2,
 ...]
[profiles profile_name]
[account lock or account unlock]

create user mr identified by mrsoft
default tablespace users
temporary tablespace temp;

create user east identified by mrsoft
default tablespace users
temporary tablespace temp
quota 10m on ts_1;

create user df identified by mrsoft
default tablespace ts_1
temporary tablespace temp
quota unlimited on ts_1;

创建完用户后,需要注意一下几点:
1、建立用户时不指定default tablespace,会将system表空间作为用户的默认表空间
2、建立用户时不指定temporary tablespace,会将temp表空间作为用户的临时表空间
3、初始建立的用户没有任何权限,所以为了使刚建立的用户连接到数据库,必须授权其create session权限
4、建立用户时没有为表空间指定quota语句,那么用户在特定表空间的配额为0,用户不能在相应的表空间上建立对象
5、初始建立的用户没有任何权限,不能执行任何数据库操作

12.2.3 修改用户
语法格式:
alter user user_name identified by pass_word
[or identified exeternally]
[or identified globally as 'CN=user']
[default tablespace tablespace_name]
[temporary tablespace tablespace_name]
[quota [integer k[m]][unlimited] on tablespace_specify1,
 quota [integer k[m]][unlimited] on tablespace_specify2,
 ...]
[profiles profile_name]
[account lock or account unlock]

1、修改用户的磁盘配额
alter user east
quota 20m on ts_1;

2、修改用户口令
alter user east identified by 123456;

3、解锁被锁住的用户
SQL> select username,account_status from dba_users;
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
DF OPEN
SCOTT OPEN
HR OPEN
ORACLE_OCM EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
BI EXPIRED & LOCKED
PM EXPIRED & LOCKED
MDDATA EXPIRED & LOCKED
IX EXPIRED & LOCKED
SH EXPIRED & LOCKED
DIP EXPIRED & LOCKED
OE EXPIRED & LOCKED
APEX_PUBLIC_USER EXPIRED & LOCKED
SPATIAL_CSW_ADMIN_USR EXPIRED & LOCKED
SPATIAL_WFS_ADMIN_USR EXPIRED & LOCKED
MR OPEN
EAST OPEN
FLOWS_FILES EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
ORDSYS EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
EXFSYS EXPIRED & LOCKED
DBSNMP EXPIRED & LOCKED
WMSYS EXPIRED & LOCKED
APPQOSSYS EXPIRED & LOCKED
APEX_030200 EXPIRED & LOCKED
OWBSYS_AUDIT EXPIRED & LOCKED
ORDDATA EXPIRED & LOCKED
CTXSYS EXPIRED & LOCKED
ANONYMOUS EXPIRED & LOCKED
SYSMAN EXPIRED & LOCKED
XDB EXPIRED & LOCKED
ORDPLUGINS EXPIRED & LOCKED
OWBSYS EXPIRED & LOCKED
SI_INFORMTN_SCHEMA EXPIRED & LOCKED
OLAPSYS EXPIRED & LOCKED
SYS OPEN
SYSTEM OPEN
OUTLN EXPIRED & LOCKED
MGMT_VIEW EXPIRED & LOCKED
39 rows selected
SQL> alter user sh account unlock;
User altered

12.2.4 删除用户
语法格式:
drop user user_name [cascade]

SQL> drop user df cascade;
User dropped

12.3 用户权限管理
12.3.1 权限简介
系统权限:
对象权限:

12.3.2 授权操作
语法格式:
grant sys_privi | role to user | role | public [with admin option]

SQL> grant connect,resource to east;
Grant succeeded
SQL> conn east/123456;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as east

create user dongfang identified by 123456
default tablespace users
quota 10m on users;

create user xifang identified by 123456
default tablespace users
quota 10m on users;

SQL> grant create session,create table to dongfang with admin option;
Grant succeeded

SQL> conn dongfang/123456
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as dongfang
SQL> grant create session,create table to xifang;
Grant succeeded
SQL> conn xifang/123456;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as xifang
SQL> create table tb_xifang
  2 (
  3 id number,
  4 name varchar2(20)
  5 );
Table created

12.3.3 回收系统权限
语法格式:
revoke sys_privi | role from user|role|public

SQL> revoke resource from east;
Revoke succeeded

如果数据库管理员用GRANT命令给用户A授予系统权限是带有with admin option选项,则该用户A有权将系统权限再次授予另外的用户B。在这种情况下,如果数据库管理员使用revoke命令撤销用户A的系统权限,则用户B的权限依然有效。

SQL> revoke create table from dongfang;
Revoke succeeded


SQL> conn xifang/123456;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as xifang
SQL> create table tb_xifang_2
  2 (
  3 id number,
  4 name varchar2(20)
  5 );
Table created

12.3.4 对象授权
语法格式:
grant obj_privi | all column on schema.object to user | role | public [with admin option] | [with hierarchy option]

SQL> grant select,insert,delete,update on scott.emp to xifang;
Grant succeeded

12.3.5 回收对象权限
语法格式:
revoke obj_privi | all on schema.object from user | role | public cascade constraints

SQL> revoke delete,update on scott.emp from xifang;
Revoke succeeded

如果数据库管理员用GRANT命令给用户A授予对象权限是带有with admin option选项,则该用户A有权将系统权限再次授予另外的用户B。在这种情况下,如果数据库管理员使用revoke命令撤销用户A的对象权限,则用户B的对象权限也会被收回。

12.3.6 查询用户与权限
存放用户、系统权限、对象权限有关的数据字典
数据字典名称
说明
DBA_USERS
数据库用户基本信息
DBA_SYS_PRIVS
已授予用户或角色的系统权限
DBA_TAB_PRIVS
数据库对象上的所有权限
USER_SYS_PRIVS
登陆用户可以查看自己的系统权限
ROLE_SYS_PRIVS
登陆用户可以查看自己的角色
ALL_TABLES
用户自己可以查询的基表信息
USER_TAB_PRIVS
用户自己将哪些基表权限授予哪些用户
ALL_TAB_PRIVS
哪些用户给自己授权

12.4 角色管理
12.4.1 角色概述
角色是一个独立的数据库实体,包括一组权限
12.4.2 预定义角色
SQL> set pagesize 50;
SQL> select * from dba_roles;
ROLE PASSWORD_REQUIRED AUTHENTICATION_TYPE
------------------------------ ----------------- -------------------
CONNECT NO NONE
RESOURCE NO NONE
DBA NO NONE
SELECT_CATALOG_ROLE NO NONE
EXECUTE_CATALOG_ROLE NO NONE
DELETE_CATALOG_ROLE NO NONE
EXP_FULL_DATABASE NO NONE
IMP_FULL_DATABASE NO NONE
LOGSTDBY_ADMINISTRATOR NO NONE
DBFS_ROLE NO NONE
AQ_ADMINISTRATOR_ROLE NO NONE
AQ_USER_ROLE NO NONE
DATAPUMP_EXP_FULL_DATABASE NO NONE
DATAPUMP_IMP_FULL_DATABASE NO NONE
ADM_PARALLEL_EXECUTE_TASK NO NONE
GATHER_SYSTEM_STATISTICS NO NONE
JAVA_DEPLOY NO NONE
RECOVERY_CATALOG_OWNER NO NONE
SCHEDULER_ADMIN NO NONE
HS_ADMIN_SELECT_ROLE NO NONE
HS_ADMIN_EXECUTE_ROLE NO NONE
HS_ADMIN_ROLE NO NONE
GLOBAL_AQ_USER_ROLE GLOBAL GLOBAL
OEM_ADVISOR NO NONE
OEM_MONITOR NO NONE
WM_ADMIN_ROLE NO NONE
JAVAUSERPRIV NO NONE
JAVAIDPRIV NO NONE
JAVASYSPRIV NO NONE
JAVADEBUGPRIV NO NONE
EJBCLIENT NO NONE
JMXSERVER NO NONE
JAVA_ADMIN NO NONE
CTXAPP NO NONE
XDBADMIN NO NONE
XDB_SET_INVOKER NO NONE
AUTHENTICATEDUSER NO NONE
XDB_WEBSERVICES NO NONE
XDB_WEBSERVICES_WITH_PUBLIC NO NONE
XDB_WEBSERVICES_OVER_HTTP NO NONE
ORDADMIN NO NONE
OLAPI_TRACE_USER NO NONE
OLAP_XS_ADMIN NO NONE
OWB_USER NO NONE
OLAP_DBA NO NONE
CWM_USER NO NONE
ROLE PASSWORD_REQUIRED AUTHENTICATION_TYPE
------------------------------ ----------------- -------------------
OLAP_USER NO NONE
SPATIAL_WFS_ADMIN NO NONE
WFS_USR_ROLE YES PASSWORD
SPATIAL_CSW_ADMIN YES PASSWORD
CSW_USR_ROLE YES PASSWORD
MGMT_USER NO NONE
APEX_ADMINISTRATOR_ROLE NO NONE
OWB$CLIENT YES PASSWORD
OWB_DESIGNCENTER_VIEW NO NONE
55 rows selected

常用预定义角色
connect
resource
dba
exp_full_database
imp_full_database

12.4.3 创建角色与授权
语法格式:
create role role_name [not identified | identified by [password] | [exeternally] | [globally]]

SQL> create role designer identified by 123456;
Role created

SQL> grant create view,create table to designer;
Grant succeeded

SQL> grant designer to dongfang;
Grant succeeded

12.4.4 管理角色
1、查看角色包含的权限
SQL> select * from role_sys_privs where role='DESIGNER';
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
DESIGNER CREATE TABLE NO
DESIGNER CREATE VIEW NO

2、修改角色密码
SQL> alter role designer not identified;
Role altered
SQL> alter role designer identified by 123456;
Role altered

3、设置当前用户要生效的角色
只有角色生效了,角色内的权限才能作用于用户。
最大可生效角色数由参数MAX_ENABLED_ROLES设定
SQL> set role designer identified by 123456;
Role set

SQL> create role queryer;
Role created
SQL> set role queryer;
Role set

4、删除角色
SQL> drop role queryer;
Role dropped

12.4.5 角色与权限的查询
存放用户、角色及权限的相关数据字典
数据字典名称
说明
DBA_COL_PRIVS
数据库列上的所有权限
DBA_ROLE_PRIVS
显示已经授予用户或其他角色的角色
DBA_TAB_PRIVS
数据库对象上的所有权限
DBA_SYS_PRIVS
已授予用户或角色的系统权限
SQL> select granted_role,default_role from dba_role_privs where grantee='SCOTT';
GRANTED_ROLE DEFAULT_ROLE
------------------------------ ------------
RESOURCE YES
CONNECT YES

通过session_role数据字典查询当前会话中的所有有效角色
SQL> conn scott/tiger;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE

12.5 资源配置PROFILE
12.5.1 profile概述
profile作为用户配置文件,它是密码限制、资源限制的命名集合。
在安装数据库时,oracle会自动建立名为default的默认配置文件
使用profile文件时需要注意如下事项:
a、建立用户时,如果不指定profile选项,oracle会自动将default分配给相应的数据库用户
b、建立profile文件时,如果只设置了部分密码和资源限制选项,其他选项会自动使用默认值,即使default文件中有相应选项的值
c、使用profile管理密码时,密码管理选项总是处于被激活状态,但如果使用profile管理资源,必须激活资源限制
d、一个用户只能分配一个profile文件。如果要同时管理用户的密码和资源,那么在建立profile时应该同时指定密码和资源选项

12.5.2 使用profile管理密码
4种密码管理:账号锁定、密码的过期时间、密码历史和密码复杂度
1、账号锁定
两个参数:
failed_login_attempts:登陆尝试的次数
password_lock_time:账户被锁定的天数

create profile lock_accout limit
failed_login_attempts 5
password_lock_time 7;

SQL> alter user dongfang profile lock_accout;
User altered

2、密码的过期时间
两个参数:
password_life_time:密码的有效天数
password_grace_time:密码失效的宽限时间

create profile password_life_time limit
password_life_time 30
password_grace_time 3;

SQL> alter user dongfang profile password_life_time;
User altered

3、密码历史
两个参数:
password_reuse_time:指定密码在多少天后可以重复使用
password_reuse_max:设置密码在能够被重新使用之前,必须改变的次数

4、密码的复杂度

12.5.3 使用profile管理资源
SQL> show parameter resource_limit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean FALSE
SQL> alter system set resource_limit=true;
System altered

SQL> show parameter resource_limit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean TRUE

利用profile文件,可以对以下资源进行限制:
a、cpu时间
b、逻辑读
c、用户的并发会话数
d、会话空闲的限制
e、会话可持续的时间
f、会话所使用的SGA空间限制

资源限制的参数;
session_per_user:用户可以同时连接的会话数
cpu_per_session:会话的cpu时间限制,单位为百分之一秒
cpu_per_call:每条SQL语句能使用的CPU时间,单位为百分之一秒
logic_reads_per_session:每个会话所能读取的数据块数量
connect_time:限制每个用户能够连接到数据库的最长时间, 以分钟为单位
idle_time: 对话容许连续不活动的总的时间,以分钟为单位

12.5.4 维护profile文件
1、修改profile文件
alter profile password_life_time limit
cpu_per_session 20000
sessions_per_user 10
cpu_per_call 500
password_life_time 180
failed_login_attempts 10;

2、删除profile文件
SQL> drop profile password_life_time cascade;
Profile dropped

12.5.5 显示profile信息
1、显示用户的资源配置信息
SQL> select profile from dba_users where username='DONGFANG';
PROFILE
------------------------------
DEFAULT

2、显示指定profile文件的资源配置信息
SQL> select * from dba_profiles where profile='LOCK_ACCOUT';
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
------------------------------ -------------------------------- ------------- --------------------
LOCK_ACCOUT COMPOSITE_LIMIT KERNEL DEFAULT
LOCK_ACCOUT SESSIONS_PER_USER KERNEL DEFAULT
LOCK_ACCOUT CPU_PER_SESSION KERNEL DEFAULT
LOCK_ACCOUT CPU_PER_CALL KERNEL DEFAULT
LOCK_ACCOUT LOGICAL_READS_PER_SESSION KERNEL DEFAULT
LOCK_ACCOUT LOGICAL_READS_PER_CALL KERNEL DEFAULT
LOCK_ACCOUT IDLE_TIME KERNEL DEFAULT
LOCK_ACCOUT CONNECT_TIME KERNEL DEFAULT
LOCK_ACCOUT PRIVATE_SGA KERNEL DEFAULT
LOCK_ACCOUT FAILED_LOGIN_ATTEMPTS PASSWORD 5
LOCK_ACCOUT PASSWORD_LIFE_TIME PASSWORD DEFAULT
LOCK_ACCOUT PASSWORD_REUSE_TIME PASSWORD DEFAULT
LOCK_ACCOUT PASSWORD_REUSE_MAX PASSWORD DEFAULT
LOCK_ACCOUT PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
LOCK_ACCOUT PASSWORD_LOCK_TIME PASSWORD 7
LOCK_ACCOUT PASSWORD_GRACE_TIME PASSWORD DEFAULT
16 rows selected