北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2 数据管理
? 数据库运行过程中,有一系列工作要作,我们希
望没有授权的用户不能操纵数据库,此为的 安全
性 ;我们希望被授权的用户在出现更新错误时能
保持数据的 完整性,此为数据库的完整性控制 ;
我们希望了解数据库的整体情况,可以查询 系统
目录 ;我们希望数据库遇到故障时,把损失降低
到最小程度,此为 数据库恢复 。
2.2.1安全性
2.2.2完整性约束
2.2.3系统目录
2.2.4数据库恢复
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1 安全性
? 安全性控制保护数据库以防止不合法的使用所造
成的数据泄露和破坏 。 其基本措施是 存取控制,
确保只授权给有资格的用户访问数据库的权限,
同时令所有未被授权的人员无法接近数据 。
? Grant语句是表所有者授予一个或一类用户访问
表的各种权利的 SQL命令 。 访问列的安全性可通
过视图实现 。 Revoke语句撤消对一个表的权限 。
? 表的所有者自动拥有所有权限, 而且不能被取消 。
2.2.1.1用户管理
2.2.1.2权限管理
2.2.1.3角色
2.2.1.4权限授予
2.2.1.5资源管理
2.2.1.6审计
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.1 用户管理
? 数据库应用系统有合法的 用户名单, 为了访问一个
数据库, 用户须用该数据库确认有效的用户名和口
令运行应用程序, 连接到数据库中 。 对不同用户可
以授予不同权限, 每个用户只能在自己权限范围内
活动 。 不同用户有不同的权限,责任明确, 保障安全 。
? 用户数,同一时刻登录到数据库的用户数 (ORACLE
中初始化参数 LICENSE_MAX_SESSIONS);数据库
可容纳的不同的用户名总数 (ORACLE中初始化参数
LICENSE_MAX_USERS).
数据库应用系统
应用开发人员
应用系统用户
DBA(可以分级 )
一般用户 (岗位区别 )
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.1 用户管理
? CREATEUSER username
IDENTIFIED BY password
[DEFAULT TABLESPACE tsname]
[TEMPORARY TABLESPACE tsname]
[QUOTA [n [K|M]] [UNLIMITD] ON tsname]
[PROFILE filename];
DEFAULT TABLESPACE用户创建的对象的表
空间, TEMPORARY TABLESPACE用户暂存
段表空间, 缺省为 SYSTEM表空间; QUOTA
指定表空间的限制配额 。 每个用户可以设置一
个配置文件, 表明自己的操作范围, PROFILE
用来指定用户配置文件 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.1 用户管理
? ALTER USER username … ; 修改用户
? DROP USER username [CASCADE]; 删除
用户 [及所属对象 ]。
? ORACLE初始系统的用户,
SYS CHANGE_ON_INSTALL
SYSTEM MANAGER
INTERNALL ORACLE (DBA用户 )
? 一个系统中用户名唯一,各个用户的信息
可以在 DBA_USERS数据字典中查到 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.2 权限管理
? 权限分为两大类:系统权限和对象权限 。
? 系统权限 用于划分 DBA的职责 (多个 DBA),有,
CREATE对象, ALTER对象, DROP对象等 80
余种 。 如果将系统权限授予某一用户, 则该用
户应当被看作 DBA。
? 对象权限 是为控制用户使用数据库对象而设立
的, 数据库对象主要有表, 视图, 序列, 过程 /
函数和快照等, 权限有 ALTER,INSERT、
DELETE, UPDATE, SELECT, INDEX,
EXECUTE,REFERENCES,对象权限与 SQL
语句有直接的对应关系, 在某个数据库对象上
拥有某种权限, 往往意味着可以执行相应的
SQL语句 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.3 角色
? 角色介于权限和用户之间,是一组系统权限和对象权限的
集合,把它们组合在一起赋予一个名字,就使得授予权限
变得简单,用户被授予某个角色,则拥有该角色的所有权限,
引入角色的概念可减轻 DBA的负担,
? 数据库应用设计者可以不再理会各个工作站的具
体用户是谁,只以抽象的角色代替,
? ORACLE 8预先定义了 8种角色,用来限制系统权
限,数据库应用设计者可以以此为基础规划和定
义一般用户,
? CREATEROLE rolename [NOT IDENTIFIED]
[IDENTIFIED [BY password|EXTERNALLY]]
如果角色有口令,用户要知道口令才可扮演该角
色,EXTERNALLY表示由操作系统检验口令,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.3 角色
? ORACLE预先定义的 8种角色,
CONNECT:连接到数据库,最终用户角色,
RESOURCE:申请资源创建对象,开发人员角色,
DBA:具有全部系统权限,可以创建用户,
IMP_FULL_DATABASE:装入全部数据库内容,
EXP_FULL_DATABASE:卸出全部数据库内容,
DELE_CATALOG_ROLE:能删除审计表中记录,
SELECT_CATALOG_ROLE:查询数据字典,
EXECUTE_CATALOG_ROLEE:执行过程和函数,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.4 权限授予
? GRANT [系统权限 |角色 ]
TO [用户 |PUBLIC|角色 ]
[WITH ADMIN OPTION];
WITH ADMIN OPTION允许权限复制给其他用户,
? GRANT [ALL |对象权限 [,对象权限 … ]|角色 ]
ON [TABLE] tablename|viewname
TO [PUBLIC|username[,username… ]|角色 ]
[WITH GRANT OPTION];
? 系统权限, 对象权限和角色均可用响应的
REVOKE语句收回,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.5 资源管理
? PROFILE为用户规定了动态资源限制,如果创建
用户时不指定资源限制文件,则采用一个叫做
DEFAULT文件的配置 (缺省配置 ).资源限制文件
可以限制一个单独的调用或整个会话所需要的资
源,
? CREATEPROFILE filename LIMIT
SESSIONS_PER_USER n|UNLIMITED --用户可同时进行几个会话
CPU_PER_SESSION n|UNLIMITED --每个会话用多少 1%秒 CPU
CONNECT_TIME n|UNLIMITED --连接数据库时间 (分钟 )
LOGICAL_READS_PER_SESSION n|UNLIMITED --会话中调用块数
…………, ;
? 限制用户动态资源的目的是为了安全,分配给用户的动态
资源应与用户的正常业务相当,如果用户资源占用超越分
配值,意味着用户在干 ‘ 份外 ’ 的工作了,系统阻止这类行
为通常是结束会话,回退当前事务,返回错误信息,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.6 审计
? DBA需要了解用户对表作了那些操作,用户登录多
少次等数据库使用情况,以便对系统进行管理 。 审
计是 DBMS用于监控用户活动,保障系统安全的重
要方法 。 ORACLE将审计记录写在审计痕迹
(Audit trail)表,可以查看此表审查数据库的活动 。
? 审计用户, AUDIT 语句选项 [BY 用户 ]
[BY ACCESS| SESSION]
[WHENEVER [NOT] SUCCESSFUL];
BY 用户 对指定用户审计,缺省为对所有用户审计;
BY ACCESS审计全部 SQL,BY SESSION一次会话相同 SQL只审
计一次 (节约 ),缺省为全部审计;
WHENEVER [NOT] SUCCESSFUL审计成功或不成功的, 缺省为
不管成功不成功均审计 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.1.6 审计
? 例,AUDIT select table,update table BY user1
对用户 user1的查询或修改表和视图操作审计 。
? 审计对象, AUDIT 选项 |ALL ON [模式,]对象
[BY ACCESS| SESSION]
[WHENEVER [NOT] SUCCESSFUL];
? 例,AUDIT insert,update ON user1.student
审计在用户 user1的 student表上的插入修改操作 。
? 审计查看, USER_AUDIT_TRAIL –定义的审计信息
DBA_AUDIT_TRAIL -审计结果
AUDIT_ACTIONS -可审计的命令
? 撤消审计, NOAUDIT…
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2 完整性约束
? 数据库应用设计者和 DBA可以事先为每个数
据项确定一些规矩,要求进入数据库的数据必
须符合规矩,这些规矩即为完整性约束,
? 实现数据完整性的方法有三种,应用接口编程,
表定义时定义约束, 触发器编程描述完整性,
后两种方法由 DBMS提供,与客户端无关,可降
低网络负担,
2.2.2.1Create table的完整性约束
2.2.2.2Alter table修改完整性约束
2.2.2.3触发器 (Trigger)
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.1 Create table的完整性约束
? CREATE TABLE [schema.]tablename
(colname dadatype [DEFAULT 值 |NULL]
[列级约束 |表级约束 ][,colname… ]);
列级约束,NOT NULL 或 [CONSTRAINT 约 束名 ]
UNIQUE|PRIMARY KEY|CHECK(条件 )
|REFRENCES 表 [(col,… )][ONDELETE CASCADE]]
表级约束,[CONSTRAINT 约束名 ] UNIQUE(col,col… )
|PRAMARY KEY (col,col… )|CHECK(条件 )
|FOREIGN KEY (col,col… ) REFRENCES 表 [(col,… )]
[ON DELETE CASCADE]
为了修改约
束,可用此子
句为列或表
约束定一名

没有此说明时,参照表的主键
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.1 Create table的完整性约束
? 通过 not null,unique,primary key可实现实体完
整性,通过发 foreign key refrences可定义参照完
整性,on delete cascade表示连带删除,
? 例,
create table orders (ordno integer not null,month char(2),
cid char(4) not null,aid char(4) not null,pid char(4) not null,
qty integer not null constraint qck check(qty>=0),
dollars float default 0.0 constraint dck check(dollars>=0.0),
primary key (ordno),
constraint cidref foreign key (cid) references customers,
constraint aidref foreign key (aid) references agents,
constraint pidref foreign key (pid) references products);
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.2 Alter table修改完整性约束
? Alter Table语句允许 DBA改变表的结构,加入或
改变列,加入或删除各种约束,(注意权限 )
? ALTER TABLE tablename
[ADD (col 类型 [DEFAULT 值 |NULL] [列级约束 |表
级约束 ][,colname… ])]
[DROP COLUMN col|(col,col… )]
[MODIFY (col 类型 [DEFAULT 值 |NULL])]
[DROP CONSTRAINT 约束名 ]
[DROP PRIMARY KEY];
? 如果表约束被命名,可以用该名字 drop该约束,
用 add子句加一新的表约束,注意加入新列影响
行的物理存储,可能使他们不能存储在磁盘的
当前位置,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.3 触发器 (Trigger)
? 触发器类似于过程和函数,是一个程序块,但过
程是被显式调用,而触发器是当事件发生时,被
自动调用 (触发 ),且触发器不接受参数 。
? 触发器能引起一个动作的执行,它可以用来实
现 过程性约束,建表时创建的约束称为 非过程
性约束 。
? Sybase数据库最早支持触发器,现在 Oracle、
DB2 UDB,Informix,SQL Server都支持,但
Core SQL-99不支持 。
? 定义触发器动作时,各个产品用自己的过程性
语言 。 以下以 Oracle为例说明 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.3 触发器 (Trigger)
? CREATE [OR REPLACE] TRIGGER trigname
BEFORE|AFTER|INSTEAD OF --触发时间
INSERT|DELETE|UPDATE [OF col,… ]--触发事件
ON tabname --只能对表
FOR EACH ROW|STATEMENT --行级触发
[WHEN (条件 )] BEGIN,.PL/SQL块,,END;
触发时间说明事件前或后或只触发不执行事件 ;
触发事件可以是增删改或三者的组合 ;
行级触发 对满足 WHEN条件的每一行都单独执行触发体,
语句级触发 只在事件发生时触发一次 ;
行级触发器中可以区分新值和旧值,事件之前的值为 old,
事件之后的值为 new,old和 new之前必须有冒号 (:);
触发器中可使用 inserting,deleting,updating三个逻辑变量,
如果 INSERT行为发生,则 inserting变量为真,否则为假,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.3 触发器 (Trigger)
? 例,create or replace trgger t_c
after update on coustomers
for each row when (new.discnt>15.0)
declare v1 number;
v2 number;
begin
v1,=:old.discnt;
v2,=:new.discnt;
dbms_output.put_line(‘old:’||to_char(v1)
||’new:’||to_char(v2));
end;
说明,对表 coustomers的修改操作发生后,把折
扣率大于 15的旧折扣率和新折扣率列出,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.2.3 触发器 (Trigger)
? Create table定义的 非过程性约束 的种类是有限
的,而 过程性约束 留出程序接口,可以实现任何
想法的约束,
? 完整性约束是为了防止错误的 SQL意外地破坏
数据完整性,当约束不满足时,非过程性约束只
能是简单地拒绝接受数据,而通过过程性约束
还能实现应该做什么,
? 显然非过程性约束比过程性约束更容易理解,
非过程性约束没有过程性约束那样灵活,相对
更成熟稳定,
? 触发器还可用于面向对象的想法的实现,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.3 系统目录
? 所有的关系数据库都有系统目录,它包含数据
库中定义的对象的信息,这些对象有用户, 表,
列, 索引, 视图, 权限, 约束等等,它是 由系
统自动维护,用户不能直接更新,但可以查询,
? ORACLE的数据字典即为系统目录,根据前缀
可分为三种不同形式,
USER_… 用户视图 (当前用户的,不列所有者 )
ALL_… 扩展的用户视图 (列所有者 )
DBA_… DBA视图
? ORACLE数据字典的另一种形式是动态性能
视图,V$…
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.3 系统目录
? ALL_TABLES 表信息
? ALL_TAB_COLUMNS 表的列信息
? ALL_CONSTRAINTS员 表的约束信息
? ALL_TAB_COMMENTS 表的描述信息
? ALL_COL_COMMENTS 列的描述信息
? ALL_TAB_GRANTS 表的权限信息
? USER_INDEXES 索引信息
? USER_IND_COLUMNS 索引的列信息
? USER_CLUSTERS 聚簇信息
? USER_VIEWS 视图信息
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.3 系统目录
? USER_SEQUENCE 同义词信息
? ALL_USERS 用户信息
? USER_SYS_PRIVS 用户系统权限信息
? USER_TAB_PRIVS 用户对象权限信息
? DBA_ROLES 角色信息
? ROLE_SYS_PRIVS 角色的权利信息
? DBA_PROFILES 用户资源配置文件信息
? USER_TRIGGERS 触发器信息处理
……………
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.3 系统目录
? DICTIONARY可列出所有数据字典表和
视 图 的 名 字 及 描 述 信
息,DICT_COLUMNS列出这些字典列和
视图的所有列及描述信息,
? 通过对数据字典的查看,可以了解整个数
据库的组成,数据库对象本身就是一对一,
一对多, 多对多的关系,我们可进一步体
会关系数据库的特点,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.3 系统目录
? 面向对象的目录表,当用户在数据库中创
建用户定义类型和用户定义函数时,不仅
要记录这些类型和函数的存在,还要记录
它们的相互依赖关系,
? ORACLE中对象关系的目录表,
USER_OBJECT_TABLES
USER_TYPES
USER_DEPENDENCIES
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 事务 是数据库的基本工作单位,每个运行事务
对数据库的影响要么在数据库中,要么不反映
在数据库中,这样才能保证数据库的一致完整,
? 数据库运行过程中的故障可能破坏数据的完
整一致,故障类型 有,
事务故障,违反完整性约束引起事务夭折,
系统故障,软硬件错误断电引起事务夭折,
介质故障,磁盘损坏部分或全部数据丢失,
? 恢复的技术,数据转储 (备份 )和日志,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 为了提高效率,对数据库对象的操作的结果不是
立刻写入磁盘,而是保留在缓冲区中,从而可以被
不同事务一次又一次地使用,如果它变得不常用,
则写入磁盘并清出缓冲区,缓冲区采用最少使用
算法 (LRU)决定最长时间内未被使用的缓冲区被
写入磁盘的数据文件中,缓冲区是否写入磁盘数
据文件与其中的数据是否提交无关,也即未提交
的数据有可能被先期写入磁盘上,后台进程
DBWR只服从于 LRU,不服从于事务,
? 为了防止因故障原因使 留在缓冲区但已提交的
数据反映不到磁盘上,或者写入磁盘的数据没有
提交,利用 日志 来记录对数据库的更新操作,日志
项记录更新操作的足够信息 (事务开始, 更新前
更新后的值, 事务结束 ).
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 日志记录首先保存在日志缓冲区中,在合适的
时刻被写入磁盘上的日志文件中,该文件包括
了在过去某个时段中的所有日志项,
? 数据缓冲区和日志缓冲区各自向数据文件和
日志文件转移数据,系统采用 先写日志原则 协
调这两项行为,
数据库系统通常在日志缓冲区创建一个日
志序列号 (LSN),LSN_BUFFMIN为日志缓冲区
被写回到磁盘后的最小序列号,
每个数据缓冲区页面记录该页最近一次更新
操作的日志序列号,记为 LSN_PGMAX.
数 据缓 冲 区页 面只 有 当 LSN_PGMAX 比
LSN_BUFFMIN小时,才能被 LRU到磁盘,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 先写日志原则保证了写入磁盘的更新操作肯定
在日志文件中作了记录,没有写入磁盘的更新操
作在日志文件中也可能作了记录 (事务提交和日
志缓冲区满也会引起日志缓冲区写入日志文件 ).。
? 对事务故障和系统故障的恢复需要根据日志文
件作两种不同类型的处理,
前卷 (ROLL FORWARD):对已提交 (已结束 )的
事务重新运行并提交,保证已提交的事务的数据
更改正确地写入数据库中,
回退 (ROLLBACK):对未提交 (未结束 )的事务做
撤消处理,用日志记录中更新前值依次替换数据
库中的数据,使数据库回到该事务执行之前的状
态,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 恢 复 过 程 的 时 间 和 ROLLBACK 和 ROLL
FORWARD过程中要读取的日志文件的长度成正
比,为了减少恢复过程的时间,记录系统经过一段
合理时间之后的一个一致状态,恢复操作即可不
用在此之前发生的日志数据项,
? 将所有已修改过的数据缓冲区均写入数据文件的
特定操作称为 检查点,
? 一个检查点的规则,检查点操作开始,新的事务不
能开始,现有事务继续执行直到提交并写入磁盘,
系统写入一个特殊的日志文件项 (CKPT)到日志
文件中,检查点操作结束,
? 以上规则可能消耗很多时间,阻塞系统操作,不同系统实现
检查点的规则不一定相同,使用复杂的检查点规则的系统
能够维护一个平稳的事务输出,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 激发检查点出现的方式有两种,
在写完指定的日志文件块数之后检查点出现,控
制检查点出现的频率,ORACLE初始化文件的
LOG_CHECKPOINT_INTERVAL 可 以 指定 块
数,频率越高,例程恢复时间越短,但增加后台进
程 DBWR的 I/O开销,影响系统整体性能,
当联机日志文件写满时检查点被激发,在归档方
式下,一旦日志文件填满,系统就运行检查点,在
检查点结束后,进行日志文件归档,归档完成之
后,联机日志才能复用,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
2.2.4 数据库恢复
? 数据库应用中,日志文件是不可缺少的,为了确
保可以恢复,可做日志镜像,
? 恢复的策略,
事务故障,系统反向扫描日志,撤消此事务对数
据库的修改 (UNDO).无需 DBA介入,例程恢复,
系统故障,系统正向扫描日志,对未执行完的事
务撤消 (UNDO),对执行完的事务 (数据可能在缓
冲区中 )重做 (REDO).无需 DBA介入,系统重新启
动时 例程恢复,
介质故障,DBA装入最新的后备数据库副
本,DBA装入有关的日志文件副本,DBA执行系
统提供的恢复命令,重做已完成的事务,
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
作业:
1.利用非过程性约束和过程性约束完成完整
性定义,保证表 agents的行的城市值必须是
表 coutomers中的城市之一,
2.CAP数据库中的四张表对应各自的用户,彼
此不能相互操作,请给出让彼此之间可以
相互查看的措施,
3.结合数据库恢复的内容谈谈如何保证数据
库的可靠性,