安全特性概述
Oracle包括安全特性来控制数据库如何访问和使用。比如,如下安全机制:
u 阻止非认证数据库访问
u 阻止非认证模式对象访问
u 用户操作审核
数据库用户和同名的模式相关联。默认情况下,每个数据库用户在对应的模式中创建和拥有所有对象的访问权限。
数据库安全可以分为两类:系统安全和数据安全。
系统安全包含控制系统级别的数据库访问和使用的机制。例如,系统权限包括:
u 有效用户的名字/密码组合
u 用户模式对象的可用磁盘空间大小
u 一个用户的资源限制
系统安全机制检查是否一个用户有权访问数据库、是否数据库审计在运行、一个用户可以执行哪些系统操作。
数据安全性包括在模式对象级别上对数据库的访问和使用机制。例如,数据安全包括
u 哪个用户有权限访问特定的模式对象和模式对象上允许每个用户执行的特定类型的操作。
u 每个模式对象动作都要审核
u 加密数据来阻止没有认证的用户使用其他方式访问到数据
安全机制
Oracle数据库提供了自动权限控制,意思是基于权限来限制信息的访问。用户允许访问一个模式对象必须给它分配适当的权限。适当的特权用户可以任意的给其他用户分配权限。
Oracle使用下列几个工具来管理数据库安全:
u 身份验证来确认使用你的网络、数据库和应用程序的实体标识
u 授权进程来限制访问和动作,限制连接用户的标识和角色
u 对表或行的对象的访问限制
u 安全策略
u 数据库审计
数据完整性和触发器
数据必须服从特定的商业规则,比如数据库管理员或者应用开发人员的要求。例如,假定一个商业规则要求inventory表的sale_discount列的行不能包含大于9的数字类型的值。如果一个Insert和Update语句试图违反这个完整性规则,然后Oracle必须回滚无效语句,给应用程序返回一个错误。Oracle提供完整性约束和数据库触发器来管理数据完整性规则。
完整性约束
一个完整性约束是表中一列的定义商业规则的声明。一个完整性约束是关于表数据的声明,并且总是正确的,符合下列规则:
u 如果要针对一个表创建一个完整性约束,但表中已有的数据不符合约束,这个约束无法建立。
u 一个约束建立之后,任何DML语句的结果违反了完整性约束,然后语句被回滚,返回一个错误。
完整性约束是定义在一个表上,而且作为表的定义的一部分保存在数据字典中,所以所有的数据库应用程序都遵循相同的规则。当一个规则修改之后,只需要在数据库级别上修改一次,不需要对每个应用程序修改多次。
Oracle支持下列的完整性约束:
u NOT NULL:表列中不允许空值(空条目)
u UNIQUE KEY:在一列或者多列中不允许重复
u PRIMARY KEY:在一列或多列中不允许重复或者空值
u FOREIGN KEY:要求一列或者多列的每一个值等于相关表的UNIQUE或者PRIMARY KEY的值。FOREIGN KEY完整性约束还定义了引用完整性操作,就是说如果引用数据修改了,Oracle要对依赖数据做同样的事情。
u CHECK:不允许不符合逻辑表达式的约束
Key
Key在多种类型的完整性约束中使用。一个Key是包含在特定类型完整性约束定义的一列或多个列。Key描述了关系数据库中不同的表和列之间的关系。Key的个体值叫做key values。
不同类型的key包含:
u Primary key:在表的PRIMARY KEY约束定义中包含的列或者多个列。一个Primary key的值唯一的标识了表中的行。每个表中只能定义一个主键。
u Unique key:UNIQUE约束定义中包含的一列或者多列
u Foreign key:引用完整性约束定义中包含的一列或者多列
u Referenced key:被同表或异表外键引用的unique key或者primary key。
触发器
触发器是由PL/SQL,Java或者C写成的过程,只要表或视图改变、某些用户操作或者某些数据库系统操作这些动作发生时,触发器就会启动。
触发器扩展了Oracle提供高度定制的数据库管理系统的能力。例如,一个触发器可以在商业繁忙的时候拒绝对表的DML操作。