数据库作为重要的数据文件库,其安全性是非常重要的。(此处的安全性是指操作上的安全性,DCL模块,而不是广义上的网络安全,服务器安全等安全性)通常是通过DCL(数据库控制语言)来实现对数据库的权限的管理。
AccessRule ::=(S,O,T,P) (用户,对象,权力,谓词条件)
eg: 对一个员工数据库
Employee(P#,Pname,Page,Psex,Psalary,D#,HEAD)
员工管理人员应该享有全部权力,收发信息人员应能查询员工名即部门,等等
其实现方式可使用储存矩阵或视图方式,储存矩阵的格式行为DB中的对象,第一列为用户ID,表内的值为权限(r,d,i,u)
视图方式为创建某一视图,将该视图的访问权分配给指定用户,eg:
Create Empv1 as select * from Employee
数据库DB,通常由DBA来创建并同时定义一系列的用户,其次会在用户中定义一个账户级别的用户A(列如员工数据管理库的管理员),由A来定义一系列的基本表和视图并将权力分配给其他用户,常用权力分3级:
Level 1 : select 读 Level 2 : modify 更新 1、2级为关系级别
Level 3 : create 账户级别 高级别包含低级别的权限。
下面介绍一下典型的SQL-DCL命令和应用:
在前面的博客中由提过DCL包含两个关键词 Grant 和 Revoke 分别表示授权和取消授权,其基本语法如下:
Grant {all privileges | privilege{,...}} (其中privilege可为select读,insert,delete,update)
On [TABLE] tablename | viewname (数据对象)
To {public | user-id{,.......}} (用户对象)
[whth grant option]; (该命令选项为许可权力传播,即该用户可将自己的权力许可给其他账户)
对应的取消授权为:
Revoke {all privileges | privilege{,...}} on tablename | viewname From {public | user-id{,.......}};
以上为用户自定义的安全机制,对于数据库本身是有内部安全机制的,即:
对关系:R(A1:D1,C1,.........An:Dn,Cn,TC)其中A1为属性,D1为域,C1为属性安全分类特性,TC为元组分类特性
只有Level(S)大于等于Level(o)时才能对数据进行访问,
而只有Level(S)小于等于Level(o)时才能对数据进行修改