安全性
1.数据库安全性概述
(1)定义用户权限
用户权限是指用户对于数据对象能够进行的操作种类。定义用户权限就是要定义某个用户可以在那些数据库对象上进行那些类型的操作。在SQL中是由GRANT和REVOKE语句实现。
(2)合法权限检查
每当用户发出存取数据库的操作请求后,DBMS首先查找数据字典,进行合法权限检查。如果用户的操作请求没有超出其数据操作权限,则执行其数据操作;否则,DBMS将拒绝执行此操作。
2.授权(GRANT)
定义用户的存取权限成为授权
对象类型 对象 操作权限
DATABASE 数据库 CREATE TABLE,ALTER TABLE
TABLE 基本表 SELECT,INSERT,UPDATE,DELETE,ALTER,INDEX,ALL PRIVILEGES
TABLE 视图 SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES
TABLE 属性列 SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES
SQL中是由GRANT语句授权,GRANT语句的一般格式为
GRANT <权限1>[,<权限2>...]
ON [<对象类型>] <对象名> [,[<对象类型>] <对象名>...]
TO <用户1> [,<用户2>...]
[WITH GRANT OPTION];
该语句的功能是将对指定操作对象的指定操作权限授予指定用户。发出该语句的可以是DBA,数据库对象的创建者(Owner),已经拥有某种权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC(全体用户)。WITH GRANT OPTION选项的作用是允许获得指定权限的用户把权限在授予其他用户。
eg:把查询Student表和修改姓名(Sname)列的权限授予用户user1。
grant update(Sname),select on Student to user1;
eg:把对表Student表,Course表和SC表的查询,修改,插入和删除等全部权限授予用户user1和用户user2.
grant all priviliges on Student,Course,SC to user1,user2;
eg:把对表SC的查询授予所有用户
grant select on SC to public;
eg:把对表SC的查询权限授予用户user3,并给用户user3有再授予的权限。
grant select on SC to user3
with grant option;
eg:用户user3把查询SC表的权限授予用户user4
grant select on SC to user4;
3.收回权限
eg:把用户user1修改姓名的权限收回。
revoke update(Sname) on Student from user1;
eg:把用户user3查询SC表的权限收回
revoke select on SC from user3;
完整性约束
(1)PRIMARY KEY(主键)约束
(2)FOREIGN KEY (外键约束)
(3)UNIQUE 唯一约束
(4)CHECK 检查约束
(5)NOT NULL 非空约束
1.PRIMARY KEY约束
eg:建立一个学生表Student,其中包括学号(Sno),姓名(Sname),性别(Ssex),年龄(Sage),入学时间(Sdate)5个属性,学号为主键。
create table student(
Sno char(6) constraint stu_key primary key,
Sname char(10),
Ssex char(2),
Sage smallint,
Sdate date
);
2.FOREIGN KEY约束
foreign key约束用于实现参照完整性。外键约束不仅可以建立与另一个表上具有主键约束的列建立联系,也可以与另一个表上具有unique约束的列建立联系,还可以参照自身表中的其他列,成为自引用。
外键的作用不只是对自身表中的数据操作进行限制,同时也限制了主键所在表的数据进行修改或删除。在SQL中,创建foreign key约束的语法格式为
[constraint <约束名> ] foreign key [(<列名>)]
references <被参照表>(<被参照表的列名>)
[on delete {cascade | no action}]
[on update {cascade | no action}]
on delete{cascade | no action}表示当要从被参照表中删除该行所引用的行时,要对该行采取的操作。若指定cascade,则从被参照表中删除被引用行时,也将从参照表中删除引用行及级联删除。若指定no action,将拒绝删除被参照表中的被引用行。默认为no action。
on update {cascade | no action}与on delete {cascade | no action}类似。若指定为cascade,则级联更新。若指定no action ,则拒绝更新,默认为no action。
eg:创建选课表SC,其中包括学号(Sno),课程号(Cno)和成绩(Grade),学号和课程号为主键,学号,课程号分别为外键。
create table SC(
Sno char(6),
Cno char(3),
Grade smallint,
constraint sc_pkey primary key(Sno,Cno),
constraint sc_fkey1 foreign key(Sno) references Student(Sno),
constraint sc_fkey2 foreign key(Cno) references Course(Cno)
);
3.UNIQUE约束
unique约束用来保证数据取值的唯一性。
[constraint <约束名>] unique [ (<列名> [,<列名>…])]
4.CHECK约束
check约束通过检查输入表中数据的值是否符合约束条件来维护值域的完整性,只有符合约束条件的数据才允许输入到表中。例如,限制学生的考试成绩(Grade)在0-100之间,则可以在成绩列上创建一个check约束。
check约束的语法格式为
[constraint <约束名>] check(<条件表达式>)
eg:在创建表时定义check约束。
create table SC(
Sno char(6),
Cno char(2),
Grade smallint check(Grade>=0 and Grade<=100),
primary key(Sno,Cno)
);
5.删除约束
alter table <表名>
drop constraint <约束名>;