500 likes | 707 Views
第 7 章 数据库保护. 本章主要介绍数据库的完全性(用户鉴别、特权、角色、审计)、数据完整性(数据库触发器)和并发控制,数据库后备及恢复等,以便对数据库进行必要的保护。. 第 7 章 数据库保护. 7.1 数据库的安全性 ( 用户鉴别、特权、角色、审计 ) 7.2 数据完整性(数据库触发器) 7.3 并发控制 7.4 数据库后备和恢复. 7.1 数据库的安全性. 目的:保护数据以防止不合法的使用所造成的数据泄露、更改或破坏 安全控制模型 在数据库系统这一级中提供两种控制:用户标识和鉴定,数据存取控制。. 用 户. DBMS. OS. DB.
E N D
第7章 数据库保护 本章主要介绍数据库的完全性(用户鉴别、特权、角色、审计)、数据完整性(数据库触发器)和并发控制,数据库后备及恢复等,以便对数据库进行必要的保护。
第7章 数据库保护 7.1数据库的安全性(用户鉴别、特权、角色、审计) 7.2 数据完整性(数据库触发器) 7.3 并发控制 7.4 数据库后备和恢复
7.1数据库的安全性 • 目的:保护数据以防止不合法的使用所造成的数据泄露、更改或破坏 • 安全控制模型 • 在数据库系统这一级中提供两种控制:用户标识和鉴定,数据存取控制。 用 户 DBMS OS DB
数据库安全性分类 • 系统安全性:指在系统级控制数据库的存取和使用的机制 • 效的用户名/口令的组合 • 一个用户是否授权可连接数据库 • 用户对象可用的磁盘空间的数量 • 用户的资源限制 • 数据库审计是否是有效的 • 用户可执行哪些系统操作 • 数据安全性:指在对象级控制数据库的存取和使用的机制。哪些用户可存取一指定的模式对象及在对象上允许作哪些操作类型
ORACLE管理数据库安全性机制 • 数据库用户和模式 • 特权 • 角色(Role) • 存储设置和空间份额 • 资源限制 • 审计
7.1数据库的安全性 7.1.1数据库的存取控制和用户的建立 7.1.2特权和角色 7.1.3审计 返回章
7.1.1数据库的存取控制和用户的建立 • 任意存取控制来控制全部用户对命名对象的存取。 • 用户对对象的存取受特权控制 • 一种特权是存取一命名对象的许可,为一种规定格式。 • 合法的用户 :有一个相应的模式 ,该用户就可存取相应模式中的全部对象 • 每一个用户有一个安全域,它是一组特性,可决定下列内容: 用户可用的特权和角色;用户可用的表空间的份额(磁盘空间);用户的系统资源限制(如CPU处理时间
建立用户的命令 ---语法格式 • CREATE USER 用户名 IDENTIFIED BY 口令 • [DEFAULT TABLESPACE 表空间名][TEMPORARY TABLESPACE 表空间名] • [QUOTA [整数[K][M]][UNLIMITED] ON 表空间名,…] • [PROFILE 环境文件名] • 操作者使用该命令时必须具有CREATE USER系统特权 • QUOTA:指定该用户在表空间可分配空间的总额 • IDENTIFIED:标识ORACLE鉴别用户的方式
建立用户—例子 • CREATE USER Sidney • IDENTIFIED BY Carton • DEFAULT TABLESPACE Cases_ts • TEMPORARY TABLESPACE temp_ts • QUOTA 10M ON cases_ts • QUOTA 5M ON temp_ts • QUOTA 5M ON SYSTEM • PROFILE engineer 返回节
7.1.2特权和角色 • 特权 :执行一种特殊类型的SQL语句或存取另一用户的对象的权力。ORACLE有两类特权:系统特权和对象特权。 • 角色:(role)为相关特权的命名组,可授权给用户和角色
系统特权 • 系统特权 :执行一种特殊动作或者在对象类型上执行一种特殊动作的权利 • 可授权给用户或角色 • 语法格式: GRANT [特权名][角色名],…TO [用户名][角色名][PUBLIC],…[WITH ADMIN OPTION] PUBLIC:表示将系统特权和角色授权给全部用户。 WITH ADMIN OPTION:允许被授与者将该系统特权或角色授给其他用户和角色
系统特权—例子 • 例7.2: 将CREATE SESSION 系统特权授给RICHARD。 GRANT CREATE SESSION TO richard 允许RICHARD登录ORACLE。 • 例7.3: 将CREATE TABLE系统特权授给角色TRAVEL_AGENT。 GRANT CREATE TABLE TO Travel_agent 执行后,在Travel_agent的特权域中已包含CREATE TABLE系统特权。 • 例7.4:现将Travel_agent角色并带有ADMIN OPTION给THOMAS。 GRANT Travel_agent TO thomas WITH ADMIN OPTION 执行之后,THOMAS可执行Travel_agent角色的操作
回收系统特权和角色命令 • REVOKE[系统特权名][角色名],…FROM[用户名][角色名][PUBLIC],… • 例7.5:从用户Bill和Mary回收DROP ANY TABLE系统特权。 REVOKE DROP ANY TABLE FROM Bill,Mary • 例7.6: 从用户HANSON回收CONTROLLER角色。 REVOKE CONTROLLER FROM HANSON
对象特权 • 在指定的表、视图、序列、函数或包上具有特殊动作的权利 • 对象特权授权命令 GRANT [[对象特权名][ALL[PRIVILEGES]](列名,…),…] ON [模式名.]对象名 TO [用户名][角色名][PUBLIC]…[WITH GRANT OPTION] • 对象特权名 :ALTER、DELETE、EXECUTE、INDEX、INSERT、REFERENCES、SELECT和UPDATE • WITH GRANT OPTION:允许被授与者可将该对象特权授权给其他用户和角色
例子:对象特权授权 • 例7.7: 将BONUS表上全部特权授给用户JONES。 GRANT ALL ON BONUS TO JONES WITH GRANT OPTION • 例7.8: 将模式ELLY中序列ESEQ的SELECT特权授给BLAKE。 GRANT SELECT ON elly.eseq TO DIAKE • 例7.9: 将SCOTT模式中EMP表在EMPNO列上的REFERENCES特权和在EMPNO、SAL和COMM列上的UPDATE特权授给BLAKE。 GRANT REFERENCES(empon),UPDATE(empno,sal,comm) ON scott.emp TO BLAKE
回收对象特权命令 • REVOKE[对象特权名] [ALL[PRIVILEGES]], …ON[模式名.对象名] FROM[用户名][角色名][PUBLIC],…CASCADE CONSTRAINTS • CASCADE CONSTRAINTS:删除任何完整性约束,被回收者在这些约束中使用了当前回收的REFERENCES特权。 • 例7.11: 从用户PEDRO回收在BONUS表上的DELETE特权。 REVOKE DELETE ON BONUS FROM Pedro
角色 --优点 • 减少特权管理 • 动态特权管 • 特权的选择可用性 • 应用可知性 • 专门的应用安全性
角色 –目的 • 为数据库应用管理特权和为用户组管理特权 • 应用角色(application role)和用户角色(user role) • 应用角色:授予的运行一数据库应用所需的全部特权 • 用户角色 :为具有公共特权需求的一组数据库用户而建立的
数据库角色功能 • 一个角色可授予系统特权或对象特权 • 一个角色可授权给其它角色,但不能循环授权 • 任何角色可授权给任何数据库用户 • 授权给一用户的每一角色可以是使能的或者使不能的 • 一个间接授权角色(授权给另一角色)对一用户可显式地使其使能或使不能
ORACLE 中的典型角色 • 预定义 :CONNENT、RESOURCE、DBA、EXP_FULL_DATABASE和IMP_FULL_DATABASE • CONNECT、RESOURCE和DBA角色同ORACLE老版本中的概念相兼容 • 为了数据库安全性,建立自己的角色
建立角色命令 • CREATE ROLE角色名 [NOT IDENTIFIED][IDENTIFIED[BY][EXTERNALLY] • NOT IDENTIFIED:指明授予该角色的用户,在使它使能时,不需要检验。 • IDENTIFIED:指明授予该角色的用户 • BY 口令选择 • EXTERNALLY选择 • 例7.12:建立角色TELLER。 CREATE ROLE TELLER IDENTIFIED BY Cashflow
更改角色命令 • ALTER ROLE角色名 [NOT IDENTIFIED] [IDENTIFIED[BY 口令][EXTERNALLY]] • 例7.13:将角色TELLER 的口令改为LETTER。 ALTER ROLE TELLERIDENTIFIED BY Letter 授给TELLER角色的用户,在以后要使角色使能时,必须指定新的口令
删除角色命令 • DROP ROLE角色名 • 当删除一角色时,ORACLE从所有授权该角色的用户中回收,并将它从数据库中删除 • 例7.14:删除FLORIST角色。 • DROP ROLE FLORIST 返回节
7.1.3审计 • 对选定的用户动作的监控和记录 • 审查可疑的活动 • 监视和收集关于指定数据库活动的数据 • ORACLE支持三种审计类型 • 语句审计 • 特权审计 • 对象审计 返回节
7.2 数据完整性(数据库触发器 ) 7.2.1 数据完整性 7.2.2数据库触发器
7.2.1 数据完整性 • 数据完整性指数据的正确性和相容性 • 完整性检查 :DBMS必须提供一种功能来保证数据库的数据完整性 • ORACLE中表的数据完整性 • 在插入或修改表的行时允许不允许包含有空值的列,称为空与非空规则。 • 唯一列值规则,允许插入或修改的表行在该列(或组列)上的值唯一。 • 主码值规则,主码的列值唯一地标识表的每一行。 • 引用完整性规则,同关系模型定义。 • 用户对列定义的规则,为复杂的完整性检查
数据完整性 • 用完整性约束(integrity constraint)和数据库触发器定义 • 完整性约束,是对表的列定义一规则的说明性方法 • 数据库触发器,是使用非说明方法实施完整性规则 返回节
7.2.2数据库触发器 • ORACLE允许定义过程,当对相关的表作INSERT、UPDATE或DELETE语句时,这些过程被隐式地执行 。这些过程称为数据库触发器 • 过程与触发器差别在于调用方法:过程由用户或应用显式执行;而触发器是为一激发语句(INSERT、UPDATE或DELETE)发出时由ORACLE隐式地触发
数据库触发器 • 数据库触发器的组成 • 触发事件或语句 :引起激发触发器的SQL语句 • 触发限制 :指定一个布尔表达式,为真时触发 • 触发器动作 :过程,是PL/SQL块 • 数据库触发器的类型 • 建立触发器命令
触发器的类型 • 触发器的类型决定于建立触发器命令中对下面的选择:BEFORE 、AFTER、 FOR EACH ROW
建立触发器命令 • 语法格式:CREATE[ON REPLACE] TRIGGER [模式名.]触发器名[BEFORE][AFTER][DELETE][INSERT] [UPDATE OF[列名,…]] ON [模式名.] 表名 • 关键字和参数说明: • ON REPLACE:如果触发器已存在,则重建触发器 • BEFORE:指示ORACLE在执行触发语句之前激发触发器。 • AFTER:指示ORACLE在执行触发语句之后激发触发器。 • DELETE:指示ORACLE每当一个DELETE语句从表中删除一行时激发触发器。 • FOR EACH ROW :指明是行触发器 。如果忽略该子句,该触发器是语句触发器 • WHEN:指定触发器限制
例子:建立触发器 • CREATE TRIGGER SCOTT.EMP_PERMIT_CHANGES • BEFORE • DELETE OR INSERT OR UPDATE • ON SCOTT.EMP • DECLARE • dummy INTEGER; • BEGIN • /* If today is a Saturday or Sunday, • Then return an error.*/ • IF (TO_CHAR(SYSDATE,’DY’)=’SAT’OR • TO_CHAR(SYSDATE,’DY’)=’SUN’) • THEN RAISE_APPLICATION_ERROR(-20501, • ‘May Not change employee table during the weekend’); • EMD IF;
例子:建立触发器(续) • /* Compare today’s date with the dates of all • company holidays.If today is a Company holiday, • then return an error.*/ • SELECT COUNT(*) • INTO dummy • FROM Company_holidays • WHERE day=TRUNC(Sysdate); • IF dummy>0 • THEN RAISE_APPLICATION_ERROR(-20501, • ‘May not change employee table during a holiday’); • END IF; • /* If the current TIME is Before 8:00 AM or after • 6:00 PM,then return an error.*/ • IF(TO_CHAR(SYSDATE,’HH24’)<8 OR • TO_CHAR(SYSDATE,’HH24’)>=18) • THEN RAISE_APPLICATION_ERROR(-20502, • ‘May only change employee table during working hours’); • END IF; • END; 返回节
7.3 并发控制 • 原因:对数据库的并行操作 ,可能造成数据不一致 • 并发控制 :并行操作进行控制 ,防止数据不一致
7.3 并发控制 7.3.1数据库不一致的类型 7.3.2封锁 7.3.3 ORACLE多种一致性模型 7.3.4封锁机制 返回章
7.3.1数据库不一致的类型 • 不一致性 • 不可重复读 • 读脏数据 • 丢失更改 • 破坏性的DDL操作 返回节
7.3.2封锁 • 防止存取同一资源的用户之间破坏性的干扰的机制 • 两种封锁:排它(专用)封锁和共享封锁 • 排它封锁 • 共享封锁 • 死锁现象 返回节
7.3.3ORACLE多种一致性模型 • 语句级读一致性和事务级读一致性 • 语句级读一致性:保证单个查询所返回的数据与该查询开始时刻相一致 • 事务级读一致性:保证在同一事务内所有查询的数据与一个时间点相一致 。可以重复读 • 事务级读一致性 : • 只读事务。该事务只能包含查询 • 排它的表封锁和行封锁 返回节
7.3.4封锁机制 • 数据封锁(DML封锁) • 字典封锁(DDL封锁) • 内部封锁 • 分布式封锁 • 并行缓冲管理封锁。
数据封锁 防止相冲突的DML和DDL操作的破坏性干扰 • 指定行封锁 :一事务获取行封锁,行封锁总是排它封锁,该事务还获取对相应表的表封锁 • 表封锁 :行共享(RS)、行排它(RX)、共享封锁(S)、共享行排它(SRX)和排它封锁(X)
其他封锁 • DDL封锁(字典封锁):保护模式对象(如表)的定义 ,DDL操作将影响对象 ,操作期间,被修改或引用的模式对象被封锁 • 内部封锁 :内部封锁保护内部数据库和内存结构,这些结构对用户是不可见的 返回节
7.3.5手工的数据封锁 • 代替默认封锁 • ORACLE自动封锁可在两级被替代 • 事务级 :LOCK TABLE命令、SELECT...FOR UPDATE 命令、具有READ ONLY 选项的SET TRANS_ACTION 命令 • 系统级 :通过调整初始化参数SERIALIZABLE和ROW_LOCKING,实例可用非默认封锁启动。该两参数的默认值为: SERIALIZABLE=FALSE ROW_LOCKING=ALWAYS 返回节
7.4 数据库后备和恢复 • 故障:硬件故障、软件故障、网络故障、进程故障和系统故障 • 故障的危害:影响数据的正确性,甚至破坏数据库 • 数据库恢复:发生故障后,希望能重新建立一个完整的数据库的处理。
数据库后备和恢复 • 7.4.1数据库恢复所使用的结构 • 7.4.2在线日志 • 7.4.3归档日志 • 7.4.4数据库后备 • 7.4.5数据库恢复 返回章
7.4.1数据库恢复所使用的结构 • 数据库后备 :由构成ORACLE数据库的物理文件的操作系统后备所组成 • 日志 :记录数据库中所作的全部修改 。 • 在线日志 • 归档日志 • 回滚段 • 控制文件:一般用于存储数据库的物理结构的状态 返回节
7.4.2在线日志 • 由多个在线日志文件组成:日志项记录的数据用于重构对数据库所作的全部修改 • 日志开关 :ORACLE结束写入一在线日志文件并开始写入到另一个在线日志文件的点 • 检查点 :ORACLE后台进程DBWR(数据库写)将SGA中所有被修改的数据库缓冲区(包含提交和未提交的)写入到数据文件 的一个事件 。检查点确保将内存中经常改变的数据段块每隔一定时间写入到数据文件 。保证自前一个检查点以来的全部修改数据块写入到磁盘 返回节
在线日志 • 执行检查点:执行以下动作 • 将当前位于主存的多有日志记录输出到稳定存储器上 • 修改的数据库缓冲区写入到磁盘上的数据文件 • 将一个日记记录<checkpoint>输出到稳定存储器上 • 镜象在线日志文件 • 镜象在线日志的机制 :对一组的全部成员并行地写
7.4.3归档日志 • 要将填满的在线日志文件组归档时,则要建立归档日志或称离线日志 • 归档机制 :决定于归档设置 ,自动归档或由用户进程发出语句手工地归档 • 数据库可运行在两种不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式 返回节
7.4.4数据库后备 • 完全后备 :完全后备(full backup)将构成ORACLE数据库的全部数据文件、在线日志文件和控制文件的一个操作系统后备 • 部分后备 :除完全后备外的任何操作系统后备,可在数据库打开或关闭下进行 返回节
7.4.5数据库恢复 • 实例故障的恢复 • 介质故障的恢复 • 介质故障是当一个文件、一个文件的部分或一磁盘不能读或写时出现的故障 • 介质故障的恢复有两种形式,决定于数据库运行的归档方式 返回节