Oracle Database 12c DBA官方手册(第8版)
上QQ阅读APP看书,第一时间看更新

1.8 安全功能

下面将概述Oracle 12c在数据库中控制并实施安全性的不同方法。第9章将深入介绍这些功能以及其他安全功能。

1.8.1 权限和角色

在Oracle数据库中,“权限(privilege)”用于控制用户对可执行的操作以及数据库中对象的访问。控制对数据库中操作的访问的权限称为“系统权限”,而控制对数据和其他对象的访问的权限称为“对象权限”。

为便于DBA分配和管理权限,数据库“角色(role)”将权限结合在一起。换言之,角色是指定的权限组。此外,角色自身可以赋予角色。

使用GRANT和REVOKE命令可授予以及取消权限和角色。用户组PUBLIC既不是用户也不是角色,也不可删除该用户组。然而,将权限授予PUBLIC时,它们会被授予现在和将来的每个数据库用户。

1.系统权限

系统权限授予在数据库中执行特定类型操作的权利,如创建用户、改变表空间或删除任意视图。下面是授予系统权限的示例:

grant drop any table to scott with admin option;

用户SCOTT可删除任意模式中任何一个人的表,WITH GRANT OPTION子句允许SCOTT将最近授予他的权限授予其他用户。

2.对象权限

在数据库中的特定对象上可授予对象权限。最常见的对象权限是用于表的SELECT、UPDATE、DELETE和INSERT,用于PL/SQL存储对象的EXECUTE,以及用于授予在表上创建索引权限的INDEX。在下面的例子中,用户RJB可在HR模式的JOBS表上执行任意DML命令。

grant select, update, insert, delete on hr.jobs to rjb;

1.8.2 审核

要审核用户对数据库对象的访问,可以通过使用AUDIT命令在指定对象或操作上建立审核跟踪(audit trail)。可审核SQL语句和对特定数据库对象的访问,操作的成功或失败(或者两者)可记录在审核跟踪表SYS.AUD$中,如果AUDIT_TRAIL初始参数的值为OS,则记录在O/S文件中。

对于每个审核操作,Oracle都创建一条审核记录,其中包括用户名、执行的操作类型、涉及的对象以及时间戳。各种数据字典视图,如DBA_AUDIT_TRAIL和DBA_FGA_AUDIT_TRAIL,可以较容易地解释来自原始审核跟踪表SYS.AUD$的结果。


警告:

对数据库对象进行过度审核可能会对性能产生负面影响。应该先对关键的权限和对象进行基础审核,然后在基础审核表明潜在问题时再扩展审核。


1.8.3 细粒度的审核

细粒度的审核功能是Oracle 9i的新增功能,在Oracle 10g、11g和Oracle 12c中得到了增强,并进一步地扩展了审核:在EMPLOYEE表上执行SELECT语句时,标准审核可以进行检测;细粒度的审核将生成一条包含EMPLOYEE表中特定访问列的审核记录,例如SALARY列。

使用DBMS_FGA程序包和数据字典视图DBA_FGA_AUDIT_TRAIL可实现细粒度的审核。数据字典视图DBA_COMMON_AUDIT_TRAIL将DBA_AUDIT_TRAIL中的标准审核记录和细粒度的审核记录结合在一起。

1.8.4 虚拟私有数据库

Oracle的虚拟私有数据库(Virtual Private Database)特性从Oracle 8i开始引入,它将细粒度的访问控制和安全应用程序上下文结合起来。安全策略附加到数据,而不是附加到应用程序,这就确保了安全规则的实施与数据访问方式无关。

例如,一个医疗应用程序上下文可能根据访问数据的病人标识号返回一个谓词,在WHERE子句中使用该谓词可确保从表中检索的数据只是与该病人相关的数据。

1.8.5 标号安全性

Oracle的标号安全性(Label Security)提供了“VPD Out-of-the-Box(预设值)”解决方案,VPD即Virtual Private Database(虚拟专用数据库);根据请求访问的用户标号和表自身行上的标号,该解决方案可限制对任何表中行的访问。Oracle标号安全性管理员不需要任何特殊的编程技巧就可以将安全性策略标号赋给用户和表中的行。

例如,高粒度的数据安全性方法允许应用程序服务提供商(Application Service Provider,ASP)的DBA只创建账户可接收应用程序的一个实例,并且使用标号安全性来限制每个表中的行只包括单个公司的账户可接收信息。