利用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)

相关