本文根据UETSC数据库课程整理而成
保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏
数据保密是指用户合法地访问到机密数据后能否对这些数据保证不泄密。
通过制订法律道德准则和政策法规来保证。
保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。
立体防御:进不来、看不见、搞不掉、跑不了
具有CONNECT特权的用户可以与数据库连接,能根据授权进行数据库中数据的查询、更新,能创建视图。
具有RESOURCE特权的用户除具有CONNECT特权外,还能创建表、索引,修改表结构,能将自己创建的数据对象的访问权授予其他用户或从其他用户那儿收回,对自己创建的数据对象能进行跟踪审查。
具有DBA特权的用户能进行所有的数据库操作。
授权就是赋予用户一定的操作数据对象的权利。
授权可以由DBA授予,也可以由数据对象的创建者授予
GRANT {all privileges|privilege{. privilege….}}
ON [TABLE] tablename|viewname
TO [PUBLIC|user_name{,user_name…}]
[WITH GRANT OPTION]
ALL PRIVILEGES是所有权限的总称
数据对象可以是基本表,也可以是视图
用户名可以代表单一用户也可以代表一组用户,当代表一组用户时我们称为角色。PUBLIC是所有数据库用户的总称;
WITH GRANT OPTION,受权者可以将此权限转授给其他用户;
一个用户如果是表的创建者,他就自动拥有了对所创建表的所有权利以及将该表权利授予其他用户的权利,而且不能取消。
授权实例
假定用户WangPing创建了表RecipeDetail, Medicine, RecipeMaster,并且WangPing执行如下授权命令。
GRANT SELECT ON RecipeDetail TO LiXia;
GRANT SELECT ON RecipeMaster TO LiXia WITH GRANT OPTION;
GRANT UPDATE(Mprice) ON Medicine TO WangHao;
GRANT REFERENCE(Mno)ON Medicine TO ZhangYang;
GRANT INSERT,DELETE ON RecipeDetail TO MengFan WITH GRANT OPTION;
LiXia能够对RecipeDetail和RecipeMaster执行查询语句,并能将RecipeMaster的查询权限授予DengTian:
GRANT SELECT ON RecipeMaster TO DengTian;
WangHao只能修改Medicine表中的Mprice列的值。
视图授权示例:假定医院的一位员工Jian希望能看到患者到科室看病的信息,但他不具有查阅医生处方的权限,即他没有对RecipeMaster表的授权。
(1)CREATE VIEW Recipe-Doctor AS
(SELECT Pname,Ddeptno
FROM RecipeMaster,patient,doctor
WHERE patient.Pno= RecipeMaster.Pno AND
RecipeMaster.Dno=doctor.Dno);
(2)GRANT SELECT ON Recipe-Doctor TO Jian;
(3)Jian可以执行如下查询语句:
SELECT * FROM Recipe-Doctor
创建角色
CRETAE ROLE Admin;
对角色授权:同用户授权一样
GRANT SELECT ON RecipeMaster TO Admin;
GRANT Admin TO LiXia;
CREATE ROLE Manager;
GRANT Admin to Manager;
GRANT Manager TO WangHao;
收回权限格式
REVOKE [WITH GRANT OPTION FOR]{ALL PRIVILEGES|privilege{. Privilege….}}
ON [TABLE] tablename|viewname
FROM [PUBLIC|user_name{,user_name…}]
[RESTRICT|CASCADE]
示例:若WangPing在授权后,发现用户的权限分配不恰当,就可以执行如下命令收回部分用户的操作权限:
REVOKE SELECT ON RecipeDetail FROM LiXia;
REVOKE UPDATE(Mprice)ON Medicine FROM WangHao;
REVOKE GRANT OPTION FOR SELECT ON RecipeMaster FROM LiXia;
RESTRICT与CASCADE
从一个用户那里收回权限可能导致其他用户也失去该权限。这一行为称为级联回收CASCADE。在大多数数据库系统中,级联回收是默认行为 。
可以指定RESTRICT方式:REVOKE SELECT ON RecipeMaster FROM LiXia RESTRICT;