数据库的安全性保护数据库以防止不合法使用所造成的数据泄漏、更改或破坏
数据库的不安全因素:
数据库系统安全模型
安全措施是一级一级层层设置的。用户要求进入计算机系统时,系统首先根据输入的用户标识进行用户身份鉴定;只有合法的用户才准许进入计算机系统;对已进入系统的用户,数据库管理系统还要进行存取控制,只允许用户执行合法操作:操作系统也会有自己的保护措施:数据最后还可以以密码形式存储到数据库中。
与数据库有关的安全技术
用户身份鉴别、多层存取控制、审计、视图、数据加密
每个用户赋予唯一的一个身份标识
静态口令鉴别(密码)、动态口令鉴别(一次一密 短信密码 动态令牌)等
确保只授权给有资格的用户访问数据库的权限 --DBMS存取控制机制
定义用户权限
将用户权限登记到数据字典中(权限是用户对某一数据对象的操作权力)
合法权限检查
用户发出存取数据库操作请求后,DBMS根据在数据字典查找,根据安全规则进行权限检查,无权限进行拒绝
用户:合法的数据库用户
对象:数据库中可访问的各类数据对象,如:表、视图等
权限:能够对数据对象进行的操作。权限分为系统权限(如Create、Alter等)和对象权限(如SELECT, INSERT等)。
授权语句:
GRANT <权限>[,<权限>] ... [ON <对象类型> <对象名>]
TO <用户> [,<用户>] … [ WITH GRANT OPTION ];
撤销权限:
REVOKE <权限> [,…] [ON <对象类型> <对象名>] FROM <用户> [,…] ;
GRANT UPDATE(Sno),SELECT ON TABLE Students TO U1,U2;/*把查询Student表和修改学号的权限给U1,U2*/
GRANT ALL PRIVILEGES ON TABLE SC,Student TO PUBLIC; /*将SC表和Student表全部权限给所有用户*/
REVOKE SELECT ON TABLE SC FROM PUBLIC;
GRANT
其语义为:将对指定操作对象的指定操作权限授予指定的用户。
发出该 GRANT语句的可以是数据库管理员,也可以是该数据库对象创建者(即属主 owner),还可以是已经拥有该权限的用户。
接受权限的用户可以是一个或多个具体用户,也可以是 PUBLIC,即全体用户
GRANT语句如果指定了 WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。但不允许循环授权。如果没有指定 WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。
REVOKE
授予用户的权限可以由数据库管理员或其他授权者用 REVOKE语句收回
CASCADE(级联) INSERT权限收回的同时,级联( CASCADE)收回了U6和U7的INSERT权限
创建数据库模式的权限
GRANT和 REVOKE语句向用户授予或收回对数据的操作权限。对创建数据库模类的数据库对象的授权则由数据库管理员在创建用户时实现。
CREATE USER语句一般格式如下:
CREATE USER <username> [WITH] [DBA | RESOURCE | CONNECT];
只有系统的超级用户才有权创建一个新的数据库用户
新创建的数据库用户有三种权限:CONNECT、 RESOURCE和DBA
数据库角色:被命名的一组与数据库操作相关的权限。角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,简化授权的过程。
创建角色:
CREATE ROLE <角色名> /*刚创建的角色没有内容*/
给角色授权:
GRANT <权限>[,<权限>]… [ ON <对象类型> 对象名 ]
TO <角色>[,<角色>]…;
分配角色:
GRANT <角色1>[,<角色2>]… TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION];
角色权限的收回 :
REVOKE <权限>[,<权限>]… [ ON <对象类型> <对象名> ]
FROM <角色>[,<角色>]…;
作用:把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护。
视图的主要功能是提供数据独立性,无法完全满足要求;
视图间接实现了支持存取谓词的用户权限定义。(某大学中假定王平老师只能检索计算机系学生的信息,系主任张明具有检索和增删改计算机系学生信息的所有权限)
将用户对数据库的所有操作自动记录到审计日志中,DBA利用日志,找出非法的操作等 事后检查的安全机制
用户级审计
系统级审计
储存加密与传输加密
数据库中数据的完整性:指数据的正确、有效、相容。
数据库管理系统采取的方法:
实体完整性
? 检查主码是否唯一,检查主码各个属性是否为空
? 在主码自动建立索引,避免全表扫描
用户定义的完整性
用户定义规则的违约处理:拒绝操作
实体完整性的违约处理:拒绝操作
参照完整性的违约处理:
参照关系违约处理:拒绝操作
被参照关系的违约处理:拒绝、级联、置空值(SET NULL)
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),/*在表级定义实体完整性,Sno、Cno都不能取空值*/
FOREIGN KEY (Sno) REFERENCES Student(Sno)/*在表级定义参照完整性*/
ON DELETE CASCADE
/*当删除 Student表中的元组时,级联删除SC表中相应的元组*/
ON UPDATE CASCADE
/*当更新 Student表中的sno时,级联更新SC表中相应的元组*/
FOREIGN KEY(Cno) REFERENCES Course( Cno)/*在表级定义参照完整性*/
ON DELETE NO ACTION/*当删除 Course表中的元组造成与SC表不一致时,拒绝删除*/
ON UPDATE CASCADE /*当更新Coue表中的cmo时,级联更新SC表中相应的元组*/
可以给每个完整性约束命名,方便增加删除,不命名的话系统会自动命名,删除较为麻烦
CONSTRAINT <约束规则名>
[PRIMARY KEY短语 | FOREIGN KEY短语 | CHECK短语]
CREATE TABLE SC (Sno CHAR(10),Cno CHAR(4),
Grade SMALLINT
CONSTRAINT C1 CHECK(Grade BETWEEN 0 AND 100),
PRIMARY KEY(Sno, Cno));
/*Alter修改表中的完整性约束*/
ALTER TABLE SC DROP CONSTRAINT C1;
ALTER TABLE SC
ADD CONSTRAINT C1 CHECK (Grade BETWEEN 0 AND 120);
断言创建以后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。
复杂的断言开销很大
CREATE ASSERTION <断言名> CHECK <约束规则>
Create Assertion chk_empid
Check (Emp_Sal.emp_id in
(Select emp_id From EmployeeInfo
Where emp_name is not null);
原文:https://www.cnblogs.com/dingruihfut/p/11766144.html