医药数据库系统原理与应用4(数据库完整性与安全性)

DBMS为数据提供统一的保护功能,主要包括数据的完整性和安全性,保证数据安全、完整、正确、有效,使其免受破坏。

1.数据库完整性

完整性约束条件:关系模型的实体完整性、参照完整性、用户定义完整性。

实体完整性

实体完整性通过primary key定义,指定一列或多列的数据值具有唯一性,同时指定为主键的列不允许有空值。

create table Recorder(
cRecorderID char(12) primary key,
tCure time);

create table Recorder(
cRecoderID char(12),
tCure time
comstraint 病历编号 primary key(cRecorder));
//创建表时定义主键,病历编号为备注的名称

alter table Regist
add
constraint 挂号编号 primary key(cRegisterID)
//在未设置主键的表中添加主键

create table RecorderPart(
cRecipeID char(12),
CPrescriptionID char(8),
iNum smallint,
constraint 处方组成 primary key(cRecipeID,CPresciptionID)
);//定义多字段联合主键
alter table student
drop constraint sno_pk,sname_uk
//删除student中的主键约束和唯一值约束

 

 

参照完整性

参照完整性通过foreign key定义哪些列为外键,用references短语指明外键参照哪些表的主码。一个表可以有多个外键,外键可以为空,若不为空,则每一个外键值必须等于另一个表中主键的某个值。

 在数据库stu中创建主表student和course,主键分别为sno和cno,创建从表sc,sc.sno为外码,与数据表student主键对应,当对主表进行更新或删除操作时,对表采用级联操作;sc.cno为外码,与数据表course主键对应,当对主表进行更新或删除操作时,对从表采用no action方式。

use stu
create table student(
sno char(9) primary key,
......);
create table course(
cno char(4) primary key,
......);
create table sc(
sno char(9) foreign key references student(sno)
    on delete cascade on update cascade,
con char(4) foreign key references course(cno)
    on delete no action on update no action,
grade smallint)

 假设数据库stu中的student和course为主表,主键分别为sno和cno,sc为从表,将sc.sno定义为外码。

use stu
alter table sc
add constraint sc_fk
foreign key(sno) references student(sno)

自定义完整性

union约束(与primary key用法相同),not null约束,check约束

例子:在定义student中,要求男生年龄在15-25之间,女生年龄在15-24之间;

create table student(
sno char(9) primary key,
sname char(8),
ssex char(2),
sage smallint,
sdept varchar(20),
check(sage>=15 and(ssex='男' and sage<=25) or(ssex='女' and sage<=24)))

例子:在表student的列sage上添加一个check约束,保证输入的数据大于0并且小于100;

alter table student
add constraint sage_ck
check(sage>=0 and sage<=100)

例子:查看表student上约束sno_ck的定义文本

use stu
exec sp_helptext sno_ck
go

例子:查看数据库中所有的check约束

use stu
select name from sysobjects where type='C '

删除数据表student中的sno字段约束

alter table student
drop constraint sno_ck

默认值约束

例子:定义student中字段ssex的默认值为女

create table student(
sno char(9) primary key,
ssex char(2) default('女')
)

例子:在数据表student中添加字段入学日期ruxue_date,默认值为当前日期

alter table student
add ruxue_date smalldatetime null
constraint date
default getdate() with values

例子:为数据表sc中字段grade 添加默认值为0

alter table sc
add constraint grade_default
default 0 for grade

alter table sc
drop constraint grade_defult
//删除默认值

触发器

触发器是一种特殊的存储过程,通过事件触发而被执行,在对表进行插入、删除或修改时自动激活。

例子:在表sc中创建一个触发器,每次插入操作时,将变量@str的值设置为“TRIGGER IS WORKING”并显示。

create trigger sc_insert on sc
after insert
as
begin
declare @str char(50)
set @str='TRIGGER IS WORKING'
print @str
end

数据库安全性

TCSEC/TDI安全级别

D-C(C1,C2)-B(B1,B2,B3)-A(A1)    可靠度逐渐增高

D:一切不符合更高标准的系统

C1:自主安全保护,能实现对用户和数据的分离,进行自主存取控制,保护或限制用户权限的传播

C2:安全产品的最低档次,不突出安全

B1:标记安全保护;对系统数据加以标记,对标记的主体和客体实施强制存取控制、审计等

B2:结构化保护;建立形式化的安全策略模型并对系统内所有主体和客体DAC(自主存取控制),MAC(强制存取控制)

B3:安全域;满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程

A1:验证设计,即提供B3级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现。

数据库安全控制常用方法:用户标记和鉴定;存取控制;视图;审计;密码存储。

授权

例子:把对student表和course表的全部权限授予用户U2,U3

grant all priviliges/select/update...
on student,course
to U2,U3
with grant option//允许他再将此权限授予其他用户

回收

例子:把用户U5对sc表的insert权限收回

remoke insert
on sc
from U5 cascade

角色

create role R1

对角色授予回收和上面过程相同。

强制存取控制MAS

在MAS中,DBMS所管理的实体被分为两大类:主体,客体

仅当主体许可证级别大于或等于客体的密级时,该主体才能取相应的客体。

仅当主体的许可证级别小于或等于客体的密级时,该主体才能相应的客体。

审计

C2以上安全级别的DBMS必须具有审计功能。

审计很费时间,所以DBMS往往将其作为可选特征。

audit :设置审计功能

noaudit :取消审计功能

audit alter,update
on sc;
//对修改sc表结构或修改sc表数据的操作进行审计

noaudit alter,update
on sc;
//取消对sc表的一切审计

  • 38
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值