4.6 Oracle数据库的安全管理
ORACLE的安全措施,
– 用户标识和鉴定
– 授权和检查机制
– 审计技术
– 用户通过触发器灵活定义自己的安全性措施用户认证
分类
– 对于每一个要连接到数据库的用户,数据库必须确认该用户有访问的权限。
– Oracle数据库可以用三种方法来认证:口令认证,操作系统认证,全局用户认证。
口令认证
– 用户提供 [用户名 ]和 [口令 ],Oracle使用有数据库管理的用户帐户信息来认证用户。
– 此时,使用户的口令具有可靠的复杂程度并且用户经常它们是非常必要的。
操作系统认证
– 通过正在运行数据库服务器的操作系统来认证用户名。
全局用户认证
– 使用外部网络服务来认证全局用户名( Global username).
– Create USER username IDENTIFIED BY
password;
– ALTER USER username IDENTIFIED BY
new_password
表空间限额:表空间限额,可以控制一个数据库的用户对数据库中表空间的物理存储空间的分配数量。
用户缺省表空间
– 用于在用户创建数据库对象时(表或索引),如果没有指定表空间时存放数据库对象。
– 创建用户时,如果不加指定,用户的缺省表空间为
SYSTEM表空间。
用户临时表空间
– 当 SQL语句需要临时工作空间时,使用临时表空间。
– 创建用户时,不指定用户临时表空间,则缺省值为
SYSTEM表空间。
CREATE USER username IDENTIFIED BY password
DEFAULT TABLESPACE tablespace_name1
TEMPORARY TABLESPACE tablespace_name2;
ALTER USER username
DEFAULT TABLESPACE tablespace_name1
TEMPORARY TABLESPACE tablespace_name2;
锁定和解锁用户
用户锁定解锁作用
– Oracle允许任何时候对用户账号进行锁定和解锁。
– 锁定账号后,用户就不能与 Oracle连接,必须对账号解锁后才允许用户通过账号访问数据库。
锁定解锁时机
– 当用户临时离开但很快又会回来继续工作。
– 当某人离开公司,锁定账号比删除账号更合适。
– 新创建用户时,缺省状态是解锁的。
ALTER USER username ACCOUNT lock/unlock;
ORACLE缺省的数据库用户
SYS
– 该账号拥有数据库字典对象。
SYSTEM
– 口令 MANAGER,缺省的数据库管理员账号,
INTERNAL
– 这是为了向下兼容,Oracle支持的 SYS帐号的别名。
ORACLE的用户标识和鉴定
ORACLE允许用户重复标识三次
如果三次仍未通过,系统自动退出
ORACLE的授权与检查机制
ORACLE授权和检查机制的特色
– ORACLE的权限包括系统权限和数据库对象的权限
– 每个用户授予与回收自己创建的数据库对象的权限
– DBA负责授予与回收系统权限,也可以授予与回收所有数据库对象的权限
– 允许重复授权,即可将某一权限多次授予同一用户,
系统不会出错
– 允许无效回收,即用户不具有某权限,但回收此权限的操作仍是成功的。
系统权限
80多种系统权限
– 创建会话
– 创建表
– 创建视图
– 创建用户
DBA在创建一个用户时需要将其中的一些权限授予该用户
角色
– 一组系统权限的集合,目的在于简化权限管理。
– ORACLE允许 DBA定义角色
– ORACLE提供的预定义角色
CONNECT
RESOURCE
DBA
CONNECT角色
– 允许用户登录数据库并执行数据查询和操纵
ALTER TABLE
CREATE VIEW / INDEX
DROP TABLE / VIEW / INDEX
GRANT,REVOKE
INSERT,UPDATE,DELETE
SELETE
AUDIT / NOAUDIT
RESOURCE角色
– 允许用户建表,即执行 CREATE TABLE操作
– 由于创建表的用户将拥有该表,因此他具有对该表的任何权限
DBA角色
– 允许用户执行授权命令,建表,对任何表的数据进行操纵。
– DBA角色涵盖了前两种角色,此外还可以执行一些管理操作。
– DBA角色拥有最高级别的权限。
数据库对象的权限
ORACLE可以授权的数据库对象
– 基本表
– 视图
– 序列
– 同义词
– 存储过程
– 函数
基本表的安全性级别
– 表级
– 行级
– 列级
表级权限
– ALTER,修改表定义
– DELETE:删除表记录
– INDEX,在表上建索引
– INSERT,向表中插入数据记录
– SELECT:查找表中记录
– UPDATE:修改表中的数据
– ALL,上述所有权限
– 表级授权使用 GRANT/ REVOKE语句例,GRANT SELECT ON SC TO U12;
行级安全性
– ORACLE行级安全性由视图间接实现例:用户 U1只允许用户 U12查看自己创建的 Student表中有关信息系学生的信息,则首先创建视图信息系学生视图 S_IS:
CREATE VIEW S_IS
AS
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student
WHERE Sdept='IS';
然后将关于该视图的 SELECT权限授予 U12用户:
GRANT SELECT ON S_IS TO U12;
列级安全性
– 实现方法
由视图间接实现
CREATE VIEW S_V
AS
SELECT Sno.Sname
FROM Student;
GRANT SELECT ON S_V TO U12;
直接在基本表上定义
GRANT UPDATE(Sno,Cno) ON SC TO U12;
数据库对象权限表对象 权限 说明表 Select,insert,
update,delete,
alter,index,ref
erences
Index权限也许为表建立索引,
References权限也许被授予者引用该表,Insert,update,references权限允许限制列。
视图 Select,insert,
update,delete
序列 Select,delete 允许被授权者使用序列生成和重用序列过程、函数、程序包、对象
execute 允许被授权者使用对象类型,执行该类型的方法。
ORACLE对数据库对象的权限采用分散控制方式
– 允许具有 WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户
ORACLE不允许循环授权
U1 ───→ U2 ───→ U3 ───→ U4
↑ │
└───────× ─────────┘
ORACLE的授权与检查机制
ORACLE的权限信息记录在数据字典中
当用户进行数据库操作时
ORACLE首先根据数据字典中的权限信息,检查操作的合法性
ORACLE的审计技术
– 用户级审计
– 系统级审计
用户级审计
– 由用户设置
– 用户针对自己创建的数据库表或视图进行审计
– 审计内容
所有用户对这些表或视图的一切成功和/或不成功的访问要求
所有用户对这些表或视图的各类 SQL操作
系统级审计
– DBA设置
– 审计对象和内容
成功或失败的登录要求
GRANT和 REVOKE操作
其他数据库级权限下的操作
ORACLE的审计设置可以自由设置
– AUDIT:设置审计功能例,AUDIT ALTER,UPDATE ON SC;
– NOAUDIT:取消审计功能例,NOAUDIT ALL ON SC;
– 对哪些表进行审计
– 对哪些操作进行审计
与审计功能有关的数据字典表
– SYS.TABLES:审计设置
TAB$NAME,表名;
TAB$OWNER:表的拥有者(即创建者)
TAB$AUDIT,审计设置
– SYS.AUDIT_TRAIL:审计内容
– SYSTEM.AUDIT_ACTION
用户定义的安全性措施
用数据库级 触发器 定义用户级安全性
触发器存放在数据字典中
用户每次对 Student表执行 INSERT,UPDATE或
DELETE自动触发该触发器
系统检查当时的系统时间,如是周六或周日,或者不是 8点至 17点,系统会拒绝执行用户的更新操作,
并提示出错信息。
CREATE OR REPLACE TRIGGER secure_student
BEFORE INSERT OR UPDATE OR DELETE ON Student
BEGIN
IF (TO_CHAR(sysdate,'DY') IN ('SAT','SUN'))
OR (TO_NUMBER(sysdate,'HH24') NOT
BETWEEN 8 AND 17)
THEN
RAISE_APPLICATION_ERROR(-20506,'You may
only change data during normal business hours.')
END IF;
END;
例:规定只能在工作时间内更新 Student表可以定义如下触发器:
资源管理表空间限制用户配置文件 (profile)
用户配置文件说明管理用户配置文件用户配置文件示例显示安全信息
表空间限额可以控制一个数据库的用户对数据库中表空间的物理存储空间的分配数量。
– 为用户提供指定的表空间限额
ALTER USER user [QUOTA {integer [K|M]|UNLIMITED}
ON tablespace]…
Alter user lellison quota 5M on users;
Alter user rlane quota unlimited on users;
Grant unlimited tablespace to rlane;
用户配置文件 (profile)
用户配置文件
– 为了简化用户对资源访问的管理,你可以使用用户配置文件,在配置文件中设置对资源的限制,
然后将配置文件分配给用户。
– 默认配置文件中的所有项目都不受限制,如果创建用户时没有指定配置文件子句,则系统将
DEFAULT指定给该用户。
– Oracle中允许 DBA修改 DEFAULT和用户定义的配置文件,用 ALTER PROFILE命令。允许删除 DEFAULT
和定义的配置文件,用 DROP PROFILE CASCADE命令。
配置文件的说明
CPU_PER_SESSION( CPU/会话)
允许一个会话占用 CPU 的时间总量。该限值以秒来表示
(单位 1/100秒)。
CPU_PER_CALL( CPU/调用)
允许一个调用 (语法分析、执行或提取 ) 占用 CPU 的时间最大值。该限值以秒来表示(单位 1/100秒) 。
CONNECT_TIME(连接时间)
允许一个会话持续的时间的最大值。该限值以分钟来表示。
IDLE_TIME(空闲时间)
允许一个会话处于空闲状态的时间最大值。空闲时间是会话中持续不活动的一段时间。长时间运行的查询和其它操作不受此限值的约束。该限值以分钟来表示。
SESSIONS_PER_USER(并行会话)
允许一个用户进行的并行会话的最大数量。
LOGICAL_READS_PER_SESSION(读取数 /会话)
允许一个会话读取的数据块总量。该限值包括从内存和磁盘读取的块。
LOGICAL_READS_PER_CALL(读取数 /调用)
允许一个调用 (语法分析、执行或提取 )在处理一个 SQL 语句时读取的数据块的最大数量。
PRIVATE_SGA(专用 SGA)
在系统全局区 (SGA) 的共享池中,一个会话可分配的专用空间量的最大值。专用 SGA的限值只在使用多线程服务器体系结构的情况下适用。该限值以千字节 (KB) 来表示。
COMPOSITE_LIMIT(组合限制)
一个会话耗费的资源总量。一个会话耗费的资源总量是以下几项的加权和:会话占用 CPU 的时间、连接时间、会话中的读取数和分配的专用 SGA 空间量。
PASSWORD_LIFE_TIME(有效天数)
规定多少天后口令失效。
PASSWORD_GRACE_TIME(失效后锁定)
失效后第一次用它成功登录之后多少天内可以更改此口令。
PASSWORD_REUSE_MAX(保留次数)
指定口令能被重新使用前必须被更改的次数。如果在该字段中指定了一个值,保留时间就会被禁用。
PASSWORD_REUSE_TIME(保留时间)
限定口令失效后经过多少天才可以重新使用。如果在该字段中指定了一个值,“保留次数”就会被禁用。
PASSWORD_VERIFY_FUNCTION(复杂性校验函数)
在分配了该概要文件的用户登录到数据库中的时候,允许使用一个 PL/SQL 例行程序来校验口令。 PL/SQL例行程序必须在本地可用,才能在应用该概要文件的数据库上执行。
Oracle 提供了一个默认脚本 (utlpwdmg.sql),不过您也可以创建自己的例行程序或使用第三方软件。校验口令的例行程序必须归 SYS 所有。
默认情况下的设置为“空” (即不进行口令校验 )。
– 登录失败后锁定帐户
– FAILED_LOGIN_ATTEMPTS(连续失败后次数)
设定允许用户连续失败的次数,如果连续登录失败达到规定的次数后,Oracle将自动锁定该用户帐号。
– PASSWORD_LOCK_TIME(锁定时间)
在登录失败达到指定次数后,指定该帐户将被锁定的天数。
如果指定了“无限制”,只有数据库管理员才能为该帐户解除锁定。
– 注:如果在任何口令选项中选择了“默认值”,
– 就会使用默认配置文件中定义的值。
创建、更改配置文件
CREATE/ALTER PROFILE profile LIMIT
CPU_PER_SESSION {integer|UNLIMITED|DEFAULT}
CPU_PER_CALL {integer|UNLIMITED|DEFAULT}
CONNECT_TIME {integer|UNLIMITED|DEFAULT}
IDLE_TIME {integer|UNLIMITED|DEFAULT}
SESSIONS_PER_USER {integer|UNLIMITED|DEFAULT}
LOGICAL_READS_PER_SESSION {integer|UNLIMITED|DEFAULT}
LOGICAL_READS_PER_CALL {integer|UNLIMITED|DEFAULT}
PRIVATE_SGA {integer [K|M]|UNLIMITED|DEFAULT}
COMPOSITE_LIMIT {integer|UNLIMITED|DEFAULT}
FAILED_LOGIN_ATTEMPTS {integer|UNLIMITED|DEFAULT}
PASSWORD_LOCK_TIME {integer|UNLIMITED|DEFAULT}
PASSWORD_GRACE_TIME {integer|UNLIMITED|DEFAULT}
PASSWORD_LIFE_TIME {integer|UNLIMITED|DEFAULT}
PASSWORD_REUSE_MAX {integer|UNLIMITED|DEFAULT}
PASSWORD_REUSE_TIME {integer|UNLIMITED|DEFAULT}
PASSWORD_VERIFY_FUNCTION {NULL|UNLIMITED|DEFAULT}
建立一个用户配置文件
Create profile appdev limit
Sessions_per_user 5
Cpu_per_session unlimited
Cpu_per_call 3000
Connect_time unlimited
Idle_time 30
Logical_reads_per_session unlimited
Logical_reads_per_call 1000
Private_sga 200K;
该文件中规定:用户可以打开不超过 5个并发的数据库会话,每个会话可以使用无限制的 cpu时间,每个数据库请求只有 30秒的 cpu时间,会话可以无限制的保持连接,
最多有 30秒的空闲,用户会话可以执行无限制的逻辑读取操作。但每个数据库请求只有 1000个逻辑块读取操作。
使用多线程服务器时,专用的 SGA为 200k。
显示安全信息
说明
– 用户可以利用数据库中的信息来查询有关用户、角色和用户配置文件信息。
Select username,account_status,default_tablespace,
temporary_tablespace,profile
From dba_users
Where username in{‘lellison’,’s’};
Select * from dba_roles where role in
{‘connect’,’resource’,’dba’,’role1’};
Select tablespace_name,username,bytes,max_bytes from
dba_ts_quotas;
Select profile,resource_name,limit from dba_profiles where
profile =‘appdev’;
ORACLE安全设计
Security
domain
默认表空间临时表空间表空间限额资源限额直接权限角色权限验证机制帐户锁
– 安全域内容
1)验证机制:用户访问数据库可以通过数据库、操作系统、网络这三种方式中的一种进行验证,一个用户究竟使用何种验证方式,根据具体需求决定。
2)表空间限额:表空间限额,可以控制一个数据库的用户对数据库中表空间的物理存储空间的分配数量。
3)默认表空间:定义用户在创建段时的存储位置,当用户创建段时,如果指定存储表空间,则使用定义段时指定的表空间,否则使用这一默认表空间。
4)临时表空间:当用户执行排序操作时,临时表空间定义临时段分配的位置。
5)帐户锁:帐户锁可以防止非法用户对系统的登录。
6)资源限制:对用户使用资源进行一定的限制。
7)直接权限:通过 GRANT直接授予用户的系统权限和对象权限。
8)角色权限:通过 GRANT将系统权限和对象权限授予角色,再将角色授予用户,使用户间接获得权限。
– 口令和资源配置文件是命名的一组口令和资源限制的设置集合。 Oracle中存在一个名为 DEFAULT的配置文件,默认配置文件中的所有项目都不受限制,如果创建用户时没有指定配置文件子句,则系统将 DEFAULT指定给该用户。
Oracle中允许 DBA修改 DEFAULT和用户定义的配置文件,用 ALTER PROFILE命令。允许删除 DEFAULT和定义的配置文件,用 DROP PROFILE CASCADE命令。
创建用户时需确定用户名和验证机制、指定默认表空间和临时表空间、确定有关表空间的限额、指定用户的配置文件。
ORACLE应用系统中一般定义一系列的用户和配置文件、定义一系列的角色,然后将角色和配置文件授予(或指定给)用户。
– 权限和角色
Oracle大约有 100多种的系统权限,包括诸如创建表空间的系统范围级操作权限、诸如创建表的用户模式内对象管理权限和诸如创建任意表的任意模式内对象管理权限。系统权限和对象权限可以通过 GRANT或
REVOKE语句授予用户或收回。
角色是被命名的一组相关的权限,角色是属于系统范围的,既不属于某个用户,也不属于某个模式。可以把系统权限和对象权限授予角色,也可以把角色授予另一个角色,最终把角色授予用户,由此方便
Oracle的安全管理。
使用角色的步骤是:创建角色、为角色授予相应的权限、将角色授予特定的用户。
Oracle中有一些预定义角色可以使用,例如 DBA、
SELECT_CATALOG_ROLE等,DBA可以直接使用。
– 应用系统的用户应用系统的安全设计一般要对用户进行分类,然后根据用户类型的不同,对其进行设置、维护及管理。
数据库管理员( DBA),默认的数据库管理员
internal,sys和 system均具有 DBA权限。数据库打开、
关闭、恢复等操作时,需使用 internal;修改数据库重要参数时使用 sys;其他一般管理应使用 system。
所有者( OWNER),对大型的应用系统,往往根据不同的用户所属将对象进行划分,这样不同的用户拥有不同的数据库对象,创建数据库对象的用户称为对象的所有者(模式)。此类用户需要有 RESOURCE的权限。
一般用户( USER),一般用户即应用系统的最终用户。此类用户对数据库而言仅需要有 CONNECT的权限即可,但此类用户的角色权限和对象使用权限需要根据具体工作和应用进一步规划和设计。
– 应用系统的一般用户在应用系统内部进行多个层次的检查和验证:
1)第一层,Oracle数据库系统层,判断其能否建立会话。
2)第二层:应用程序的使用权限,检查验证用户能够使用哪些应用程序。
3)第三层,Oracle数据库的对象级权限,判断用户能否操纵其相应的对象,对象级权限是通过自定义
Oracle角色来设置的。
1,ORACLE安全性设计包括哪些方面?
2,ORACLE的授权和检察机制特点。
思考题