验证机制(AuthenticationMechanism)
n 可通过以下方式之一对访问数据库的用户进行验证
p 数据字典、操作系统、网络
表空间限额(TablespaceQuotas)
n 控制分配给用户的物理存储空间的大小
缺省表空间(DefaultTablespace)
n 如果用户在创建段时不明确指定表空间,那么缺省表空间会定义用户所创建段的存储位置
临时表空间(TemporaryTablespace)
n 如果用户执行的操作要求将排序数据写入磁盘,那么临时表空间会定义Oracle 服务器分配哪些区
帐户锁定(Account Locking)
n 可锁定帐户以防止用户登录数据库
资源限制(ResourceLimits)
n 可以对某些资源的使用加以限制
p 如:CPU 时间、I/O 以及用户打开的会话数目
直接权限(DirectPrivileges)
n 权限用于控制用户能在数据库中执行的操作
角色权限(Role Privileges)
n 可通过使用角色间接授予用户权限
1. 用户管理:在系统中有5个比较特殊的用户sys,sytem,sysman,dbsnmp,public,其中sys是数据库中具有最高谦虚的数据管理员
Oracle数据库预定义的几个管理用户账户
a) SYS:是数据库中具有最高权限的数据库管理员,可以启动、修改和关闭数据库,拥有数据字典;
b) SYSTEM:是一个辅助的数据库管理员,不能启动和关闭数据库,但可以进行其他一些管理工作,如创建用户、删除用户等。
c) SYSMAN:是OEM的管理员用户,可以对OEM进行配置和管理。
d) PUBLIC:实质上是一个用户组,数据库中任何一个用户都属于该组成员。要为数据库中每个用户都授予某个权限,只需把权限授予PUBLIC就可以了。
创建数据库用户语法:
CREATE USER user_name IDENTIFIED
[BYpassword|EXTERNALLY|GLOBALLY AS 'external_name']
[DEFAULTTABLESPACE tablespace_name]
[TEMPORARYTABLESPACE temp_tablesapce_name]
[QUOTA n K|M|UNLIMITEDON tablespace_name]
[PROFILEprofile_name]
[PASSWORDEXPIRE]
[ACCOUNTLOCK|UNLOCK]
o 参数说明
n IDENTIFIED:用于指明用户身份认证方式
n DEFAULT TABLESPACE:用于设置用户的默认表空间
n TEMPORARY TABLESPACE:用于设置用户的临时表空间
n PROFILE:用于为用户指定配置文件,默认值为DEFAULT,采用系统默认的配置文件
n ACCOUNT LOCK:用于设置用户初始状态为锁定,默认为不锁定
n ACCOUNT UNLOCK:用于设置用户初始状态为不锁定或解除用户的锁定状态
修改用户的语法:
ALTER USER user_name IDENTIFIED
[BYpassword|EXTERNALLY|GLOBALLY AS 'external_name']
[DEFAULTTABLESPACE tablespace_name]
[TEMPORARYTABLESPACE temp_tablesapce_name]
[QUOTA nK|M|UNLIMITED ON tablespace_name]
[PROFILEprofile_name]
[DEFAULT ROLErole_list|ALL [EXCEPT role_list]
|NONE]
[PASSWORDEXPIRE]
[ACCOUNTLOCK|UNLOCK]
例子:
o 举例:
n 将用户user3的口令修改为newpswd,同时将该用户解锁
ALTER USER user3 IDENTIFIED BY newpswd ACCOUNT UNLOCK
n 用户的锁定与解锁
ALTER USER user3 ACCOUNT LOCK ALTERUSER user3 ACCOUNT UNLOCK;
n 更改用户的表空间限额
ALTER USER user3 QUOTA 0 ON USERS
删除用户:DROP USERuser_name [CASCADE]
n 如果用户拥有数据库对象,则必须在DROP USER语句中使用CASCADE选项
2. 权限管理:系统权限和对象权限
a) 系统权限:系统权限是指在数据库级别执行某种操作的权限,或针对某一类对象执行某种操作的权限
例如,CREATESESSION权限、CREATE ANY TABLE权限
b) 对象权限:对象权限是指对某个特定的数据库对象执行某种操作的权限
例如,对特定表的插入、删除、修改、查询的权限
c) 授权方法:直接授权和间接授权
i. 直接授权:利用GRANT命令直接为用户授权
ii. 间接授权:先将权限授予角色,然后再将角色授予用户
d) 系统权限可分为以下几类
允许执行系统范围操作的权限
如CREATE SESSION,CREATE TABLESPACE
允许管理用户自己方案中的对象的权限
如CREATE TABLE
允许管理任何方案中的对象的权限
如CREATE ANY TABLE
e) 系统权限有202种(11g)
SELECT DISTINCT privilege from DBA_SYS_PRIVS
f) 常用的系统权限如下:
创建会话(CREATE SESSION)
更改数据库(ALTER DATABASE)
更改系统(ALTER SYSTEM)
管理表空间(CREATE TABLESPACE、ALTER TABLESPACE、DROP TABLESPACE)
创建表(CREATE TABLE)
授予任何对象权限(GRANT ANY OBJECT PRIVILEGE)
创建任何表(CREATE ANY TABLE)
管理任何表(SELECT / INSERT / UPDATE / DELETE ANY TABLE)
g) 系统授权的语法:GRANTsys_priv_list TO user_list|role_list|PUBLIC[WITH ADMIN OPTION]
sys_priv_list:表示系统权限列表,以逗号分隔;
user_list:表示用户列表,以逗号分隔;
role_list:表示角色列表,以逗号分隔;
PUBLIC:表示对系统中所有用户授权;
WITH ADMIN OPTION:表示允许系统权限接收者再把此权限授予其他用户。
h) 例子:
a) 为Public组用户授予create session 系统权限
grant create session to public
b) 为用户user1授予create session,create table,create view 系统权限
grant create session,create table,create view to user1;
i) 系统权限回收:REVOKE sys_priv_list from user_list|role_list|PUBLIC
j) 对象权限管理:Oracle数据库中共有9种类型的对象权限,不同类型的模式对象有不同的对象权限,而有的对象并没有对象权限,只能通过系统权限进行控制,如簇、索引、触发器、数据库链接等
k) 对象权限有:select,update,delete,insert,references,execute,read,alter,index,all
l) 对象权限授予:GRANT obj_priv_list|all ON [schema.]object to user_list|role_list[with grant option]
obj_priv_list:表示对象权限列表,以逗号分隔
[schema.]object:表示指定的模式对象,默认为当前模式中的对象
user_list:表示用户列表,以逗号分隔
role_list:表示角色列表,以逗号分隔
WITH GRANT OPTION:表示允许对象权限接收者把此对象权限授予其他用户
m) 例子:将scott模式下的emp表的select,uptate,insert权限授予user1用户
grant select,insert,update on scott.emp to user1;
n) 对象权限的回收:revokeobj_priv_list | all on [schema.]object from user_list| role_list;
o) 小结:withadmiin option(系统权限)和with grant option(对象权限)
对于系统权限:当甲用户授权给乙用户,且激活该选项,则被授权的乙用户具有管理该权限的能力:或者能把得到的权限再授给其他用户丙,或者能回收授出去的权限。当甲用户收回乙用户的权限后,乙用户曾经授给丙用户的权限仍然存在
对于对象权限:当甲用户授权给乙用户,且激活该选项,则被授权的乙用户具有管理该权限的能力:或者能把得到的权限再授给其他用户丙,或者能回收授出去的权限。当甲用户收回乙用户的权限后,乙用户曾经授给丙用户的权限也被回收。
p) 查询权限的信息
包含授予的系统权限信息
DBA_SYS_PRIVS、USER_SYS_PRIVS
包含对象的授权信息
DBA_TAB_PRIVS、ALL_TAB_PRIVS、USER_TAB_PRIVS
包含所有字段已授予的对象权限信息
DBA_COL_PRIVS、ALL_COL_PRIVS、USER_COL_PRIVS
用户当前可用的权限
SESSION_PRIVS
3. 角色管理:角色就是一系列相关权限的集合
a) 特点:
可以通过授予和撤消系统权限所用的命令来授予和撤消用户的角色
可以将角色授予任何用户或角色。但是,不能将角色授予它本身,也不能循环授予
角色可以由系统权限和对象权限组成
对于被授予某种角色的每个用户来说,该角色可以启用,也可以禁用
角色可要求通过口令启用
现有的用户名和角色名中,每个角色名必须唯一
角色不属于任何人,也不存在于任何方案中
在数据字典中存储了有关角色的说明
b) 数据字典:DBA_ROLES、ROLE_SYS_PRIVS,可以查询系统预存的角色
select role from dba_roles; (查询看有哪些角色)
select * from role_sys_privs where role = 'RESOURCE';
(查询看某个角色具有哪些系统权限)
c) 常用的角色:connect,resource,dba,public
d) 创建角色:create role role_name [not identified] [identified by password]
role_name:用于指定自定义角色名称,该名称不能与任何用户名或其他角色相同
NOT IDENTIFIED:用于指定该角色由数据库授权,使该角色生效时不需要口令
IDENTIFIED BY password:用于设置角色生效时的认证口令
e) 角色权限的授予与回收:
i. grant role [,role] touser|role|public with admin option
ii. revoke role [,role]user|role|public
给角色授予适当的系统权限、对象权限或已有角色
在数据库运行过程中,可以为角色增加权限,也可以回收其权限
给角色授权时应该注意,一个角色可以被授予另一个角色,但不能授予其本身,不能产生循环授权
f) 修改角色:alter role role_name [not identified ][identified by password]
g) 设置用户的缺省角色:alter user user_name default role [role_name]| [all [exceptrole_name]] | [none]
h) 角色的生效和失效:set role [role_name [identified by password]]| [all [excepterole_name]] | [none]
role_name:表示进行生效或失效设置的角色名称
IDENTIFIED BY password:用于设置角色生效或失效时的认证口令
ALL:表示使当前用户所有角色生效
EXCEPT role_name:表示除了特定角色外,其余所有角色生效
NONE:表示使当前用户所有角色失效
i) 删除角色:drop role role_name
j) 查询角色信息:
数据库中所有角色及其描述
DBA_ROLES
授予的角色信息
DBA_ROLE_PRIVS、USER_ROLE_PRIVS、ROLE_ROLE_PRIVS
为角色授予的系统权限信息
ROLE_SYS_PRIVS
为角色授予的对象权限信息
ROLE_TAB_PRIVS
当前会话所具有的权限信息、角色信息
SESSION_PRIVS、SESSION_ROLES
4. 配置文件管理:也称为概要文件,具有双重功能:实施口令策略,限制回话可以占用的资源,在oracle数据库创建的同时,系统会创建一个名为default的默认配置文件,系统默认将default配置文件作为用户的配置文件
a) 管理口令:
i. FAILED_LOGIN_ATTEMPTS:限制用户在登录Oracle数据库时允许失败的次数
ii. PASSWORD_LOCK_TIME:设定当用户登录失败后,用户账户被锁定的天数
iii. PASSWORD_LIFE_TIME:设置用户口令的有效天数
iv. PASSWORD_GRACE_TIME:用于设定提示口令过期的天数
v. PASSWORD_REUSE_TIME:指定一个用户口令被修改后,必须经过多少天后才可以重新使用该口令
vi. PASSWORD_REUSE_MAX:指定一个口令被重新使用前,必须经过多少次修改
vii. PASSWORD_VERIFY_FUNCTION:设置口令复杂性校验函数
b) 资源限制:
i. SESSIONS_PER_USER:限制一个用户打开数据库会话的最大数量。
ii. CPU_PER_SESSION:限制用户在一次会话期间可以占用的CPU 时间总量,单位为百分之一秒
iii. CPU_PER_CALL:限制每个调用可以占用的CPU时间总量,单位为百分之一秒
iv. LOGICAL_READS_PER_SESSION:允许一个会话读取数据块的最大数量
v. LOGICAL_READS_PER_CALL:允许一个调用读取的数据块的最大数量
vi. PRIVATE_SGA:在共享服务器操作模式中,该参数限制在SGA中一个会话可分配私有SQL区的最大值CONNECT_TIME:限制每个会话可持续的最大时间值,单位为分钟
vii. IDLE_TIME:限制每个会话处于连续空闲状态的最大时间值,单位为分钟
viii. COMPOSITE_LIMIT:称为“综合资源限制”,是一个用户会话可以消耗的资源总限额。该参数由下面几个参数综合决定:
CPU_PER_SESSION
LOGICAL_READS_PER_SESSION
PRIVATE_SGA
CONNECT_TIME
c) 创建配置文件:create profile profile_name limitresource_parameters|password_parameters;
i. profile_name:用于指定要创建的配置文件名称;
ii. resource_parameter:用于设置资源限制参数,形式为:
iii. resource_parameter_nameinteger|UNLIMITED|DEFALUT
iv. password_parameters:用于设置口令参数,形式为:
v. password_parameter_nameinteger|UNLIMITED|DEFALUT
d) 例子:创建一个名为pwd_profile的配置文件,如果用户连续4次登录失败,则锁定该用户,10天后该用户自动解锁
create profile pwd_profile limit failed_login_attempts 4password_lock_time 10
e) 例子:创建一个名为res_profile的配置文件,要求每个用户最多可以创建4个并发会话;每个会话持续时间最长为60分钟;如果会话在连续20分钟内空闲,则结束会话;每个会话的私有SQL区为100KB;每个SQL语句占用CPU时间总量不超过10秒。
create profile res_profile limit sessions_per_user 4connect_time 60 idle_time 20 private_sga 100K cpu_per_call 100
f) 为用户指定配置文件
i. create user user1 identified byuser1 profile res_profile
ii. alter user user2 profilepwd_profile
g) 修改配置文件
i. 语法:alter profile profile_name limitresource_parameters|password_parameters
ii. 例子:修改pwd_profile的配置文件,将用户口令有效期设置为10天
alter profile pwd_profile limit password_life_time 10;
h) 删除配置文件
i. 语法:drop profile profile_name [cascade]
ii. 例子:drop profile pwd_profile cascade;
i) 查询配置文件
i. USER_PASSWORD_LIMITS:
ii. 包含通过配置文件为用户设置的口令策略信息
iii. USER_RESOURCE_LIMITS:
iv. 包含通过配置文件为用户设置的资源限制参数
v. DBA_PROFILES:
vi. 包含所有配置文件的基本信息
vii. DBA_USERS