利用SQL语言实现数据库自主安全性
1.SQL语言的用户和权利
(1)用户关系级别:超级用户->账户级别(程序用户)->关系级别(普通用户)
(2)级别1:Select :读DB,Table,Record,Attribute,...
级别2:Modify:更新
Insert:插入新元组,...
Update:更新元组中的某些值,...
Delete:删除元组,...
级别3:Create:创建(创建表空间,模式,表,索引,视图等)
Create:创建
Alter:更新
Drop:删除
(3)级别高的权利自动包含级别低的权利,级别3的权利称为账户级别的权利,而将级别1和2称为关系级别的权利(3>2>1)
2.SQL语言的授权命令(GRANT)和应用
(1)GRANT {all PRIVILEGES | privilege {, privilege ...}}
ON [TABLE] tablename | viewname
TO {public | user-id {, user-id}}
[WITH GRANT OPTION];
(2)user-id:某一用户的账号,由DBA创建的合法账户
(3)public:允许所有有效用户使用授权的权利
(4)privilege:SELECT | INSERT | UPDATE | DELETE | ALL PRIVILEDGES
(5)WITH GRANT OPTION 选项是允许别授权者传递这些权利
(6)示例
假定高级领导为Emp0001,部门领导为Emp0021,员工管理员为Emp2001,收发员为Emp5001(均为Userld,也即员工的P#)
Grant All Privildeges ON Employee To Emp2001; //员工管理员拥有所有的权限
Grant Select ON EmpV2 To Emp5001;
Grant Select ON EmpV3 To public;
Grant Select ON EmpV4 To Emp0021;
授予视图访问的权利,并不意味着授予基本表访问的权利
授权者授予的权利必须是授权者已经拥有的权利
(7)收回授权命令
REVOKE{ all PRIVILEGES | priv {, priv ...}} ON tablename | viewname FROM {public | user {,user ...}}
解释:收回什么命令,在哪个表或视图上,从什么用户身上
(8)示例
revoke select on employee from UserB;
3.自主安全性的授权过程
(1)DBA创建DB,为每一个用户创建一个账户
(2)DBA授予某用户账户级别的权利
(3)具有账户级别的用户可以创建基本表和视图,他也自动成为该表或该视图的属主账户,拥有该表或该视图的所有访问权利
(4)用有属主账户的用户可以将其中的一部分权利授予另外的用户,该用户也可将权利进一步授权给其他用户...
(5)授权的传播范围
1)水平传播数量(树的广度):授权者的再授权用户数目(A授权给B,授权给C,又授权给D)
2)垂直传播数量(树的深度):授权者传播给被授权者,再被传播给另一个被 授权者,...(A授权给B,B授权给C,C授权给D)