数据库安全性
数据库的不安全因素
非授权用户对数据库的恶意存取和破坏
数据库中重要或敏感数据被泄露
安全环境的脆弱性
授权
SQL中使用GRANT和REVOKE语句向用户授予或收回对数据的操作权限
root账号
grant select on sc to test
grant select on course to test2
with grant option
/*with grant option 转授权(只能转送一轮次)当用户在把对某个对象的权限
授予给其他用户的使用*/
grant select on student to public
/*一般可以将查询的权限授予给Public 这样所有的用户都可以查询相应的表
但是update和insert这样的命令需要单独授权*/
/*update更新通常时对表的属性进行授权*/
grant update(sno),select on student to tang
grant insert,select on sc to tang
revoke insert on sc from tang
数据库完整性
实体完整性
在CREATE TABLE中用PRIMARY KEY定义。对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。对多个属性构成的码只有一种说明方法,即定义为表级约束条件
CRETAE TABLE student
(
sno CHAR(9) PRIMARY KEY,
sname CHAR(20) not null,
ssex CHAR(2),
sage SMALLINT,
)
CREATE TABLE SC
(
sno CHAR(9) NOT NULL,
cno CHAR(4) NOT NULL,
grade SMALLINT,
PRIMARY KEY(sno,cno),
)
实体完整性检查和违约处理
检查主码值是否唯一,如果不唯一则拒绝插入或修改
检查主码的各个属性是否为空,只要一个为空就拒绝插入或修改
PS:全表扫描十分耗时,所以关系数据库系统管理一般都在主码上自动建立一个索引(例如B+树),通过索引查找基本表中是否已经存在新的主码值将大大提高效率。
参照完整性
在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码
CREATE TABLE SC
(
sno CHAR(9) NOT NULL,
cno CHAR(4) NOT NULL,
grade SMALLINT,
PRIMARY KEY(sno,cno),
FOREIGN KEY(sno) REFERENCES student(sno),
FOREIGN KEY(cno) REFERENCES course(cno),
)
参照完整性检查和违约处理:
用户定义完整性
用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。
属性上的约束条件
not null
unique
check
ssex CHAR(2) CHECK (ssex in ('男','女')),
如果操作不满足约束条件则拒绝执行
元组上的约束条件
CHECK短语定义元组上的额约束条件,同属性值限制相比,元组级的限制可以设置不同属性之间取值的i相互约束条件
CREATE TABLE Student
(
Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')
/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/
);
如果操作不满足约束条件则拒绝执行
完整性约束命名子句
约束
CONSTRAINT <完整性约束条件名><完整性约束条件>
CREATE TABLE Student
(
Sno NUMERIC(6)
CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
Sname CHAR(20)
CONSTRAINT C2 NOT NULL,
Sage NUMERIC(3)
CONSTRAINT C3 CHECK (Sage < 30),
Ssex CHAR(2)
CONSTRAINT C4 CHECK (Ssex IN ( ‘男’,'女')),
CONSTRAINT StudentKey PRIMARY KEY(Sno)
);
在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。
修改或删除约束
ALTER TABLE Student
DROP CONSTRAINT C4;
如果要修改的话可以先把旧的约束条件删除后再进行添加新的约束条件