数据库保护
? 安全性
? 完整性
? 并发控制
? 事务设计
? 数据库的后备与恢复
安全性
?用户标识(帐号和密码)
?存取控制(授权)
?审计
密码
?操作系统用户密码
?数据库用户帐号和密码
?修改密码
?alter user student1 identified by abc;
权限控制
?Grant 系统权限 to 用户名 ;
?系统权限,
?create any table(可在任何模式中建表 )
?alter any table(更改任何模式中的任何表、视图 )
?create table(在自己模式中建表)
?create sequence ( 在自己模式中建序列)
?drop user ( 删除用户)
?lock any table(锁任何模式中的表、视图)
?select any table (查询任何模式的表、视图 …)
权限控制
?Grant 角色 to 用户名 ;
?角色 是一组系统权限的集合, 系统预定
义了以下三种角色;
?RESOURCE角色
?create table
?create sequence
?create trigger
?create procedure
?create cluster
权限控制
?CONNECT角色
?create table
?create view
?create synonym
?create sequence
?create database link
?create cluster
?create session
?alter session
?DBA
权限控制
?用角色授权
grant connect,resource to student1 ;
?回收权限
revoke connect from student1 ;
权限控制
?Grant 对象特权 on 表名 to 用户名 ;
对象特权
DELETE
UPDATE
SELECT
INDEX
EXECUTE
INSERT
ALTER
REFERENCES

?
?
?
?
?
?
?
.视图
?
?
?
?
序列
?
?
快照
?
.过程、函数
?
权限控制
?GRANT SELECT(ENO,EANME,AGE) ON emp
TO student2 ;
?GRANT INSERT ON emp TO student2 ;
?GRANT ALL ON DEPT TO student2 ;
审计
?审计保存数据库用户所执行的操作记录。
对于每一个被审计的操作,ORACLE产
生一个审计记录,该记录包括如下信息:
?执行操作的用户
?操作的类型
?操作所涉及的对象
?操作的日期和时间
审计
?SQL语句审计
?audit update table,delete table,
insert table ;
?audit select table by student1 ;
?模式对象审计
?audit select on student1.emp ;
?audit all on student1.order ; ( 序列)
?查看审计表
完整性约束
?完整型-数据的正确性和相容性。
?防止数据库中存在不符合语义的数据。
?防止错误信息的输入与输出。
?约束类型:
?值的约束(类型、范围、精度 … )
?数据之间联系的约束(属性之间,主码、
引用 … )
完整性约束
(1)主码完整性约束
sno char(6) constraint s1 primary key,
(2) 非空 完整性约束
sname char(10) constraint s2 not null,
(3) 唯一 完整性约束
dname char(20) constraint d2 unique,
(4) check完整性约束
age number constraint s3
check(age between 15 and 25)
完整性约束
(5) 引用完整性约束
dno char(3) constraint e4
references dep(dno) on delete ascade
引用完整性约束
?先建主表,后建子表
?子表引用的必须是主表的主码(或定了
unique约束的列)。
?子表 dno的值必须是合法值(主表值)。
?当删除主表记录时,若子表中有对应记
录,不能删。
?指定了 on delete cascade 连带删除。
事务与并发控制
事务 -transaction
?基本概念
?事务是一个操作序列,一个事务中的操作要么都
做,要么都不做。事务是一个不可分割的工作单
元(原子性)。
?事务是并发控制的基本单位。
?事务的作用
?维护数据的完整性。
?实现并发控制。
?事务开始- 事务结束
?SQL语句 — commit
?DDL语句 - 单语句事务
rollback ;
savepoint a
rollback to a
事务回滚



滚系统


事务设计 — 划分工作单元
?事务设计直接影响数据库的完整性及应用的性
能。
?事务与工作单元
事务的含义是将一些紧密相关的 SQL语句包
含起来。完成一项任务,形成一个工作单元。
事务设计 — 划分工作单元
?一个事务不能包含多个工作单元。
?当一个事务含有多个工作单元时,数据库必须长
时间地维护代表事务的内部系统信息。这会降低
系统性能。
?特别是当 oracle同时承担多个这样的不良事务设计
时更糟。
例 (事务含有 3个独立单元,不相干的事)
insert into emp; insert into part;
insert into orders;
事务设计 — 划分工作单元
?一个工作单元不能分散在多个事务中
?一些不必要的小事务提交会降低服务器的性能。
例,insert into dep… ; commit ;
insert into emp… commit ;
insert into emp..,commit ;
?部分化的事务会影响数据库数据的完整性
?如果输入部分职工记录就提交。另一用户(会计)
就会使用不完整的数据,根据不完整的职工清单
做了工资报表。
并发控制
?R,读用户 W,写用户
R R W W
R W
W - W
10
108
8
107
7
写丢失
防止写丢失-加锁
?自动加行锁
insert,update,delete
?读语句加锁 (锁住读的数据)
select * from emp For update of sal;
?锁语句 LOCK
lock table emp in share mode ;
?在事务中加的锁在事务结束时自动打开。
死锁
UPDATE emp
SET sal=sal+500
WHERE ename='张珊 ';
UPDATE emp
SET sal=sal+700
WHERE ename='李禾 ';
UPDATE emp
SET sal=sal+300
WHERE ename='李禾 ';
UPDATE emp
SET sal=sal+200
WHERE ename='张珊 ';
事务 A 事务 B
如何解决死锁
?Oracle系统在检测到一个死锁时, 它会
给引起死锁的其中一个事务发出一个错
误信息, 然后回滚该事务的当前语句 。
并告之用户应显式地回滚他的事务, 而
其他用户就会因获得资源而完成事务,
死锁就被解开了 。
实现读一致性-只读事务
Set transaction read only;
只读事务
commit ;



防止读脏数据
READ 写事务
防止读脏数据


并发控制演示
5
Select num,..for update 5
Update num=3
commit
Update … num=1?
3 3
Update … num=111
Select num 3
commit
Select num 1
并发控制演示
Set transaction read only 5
Select num 5 Update num=3
Select num
commit
commit
commit
3
5
3Select num
Select num 1
Update num=1 1
数据库的后备与恢复
?硬件错误
?软件错误
?操作员的失误
?人为破坏
数据库的后备与恢复
?操作系统级
UNIX( tar cpio )
?数据库级
?卸出( Export)实用程序
允许用户转贮数据库中的数据。
?装入( import) 实用程序
把卸出的文件读到一个数据库中。