数据库复习
CH7 安全性
7.1 数据库安全性介绍
如果说完整性是针对授权用户的数据库保护措施,那么安全性就是针对非授权用户的数据库保护措施
安全性问题涉及的层面很多,非法用户可以从以下各层面对数据库的窃取或篡改:
层面 | 窃取或篡改行为 | 应对措施 |
---|---|---|
数据库系统 | 获取高级用户数据库权限 | 身份验证,权限和可获取数据对等 |
操作系统 | 获取操作系统root权限想干啥就能干啥,不仅仅限于对数据库的操作了 | 提升操作系统安全级别 |
网络 | 通过网络窃听和身份伪装也能窃取线上机密数据 | 身份验证和加密传输 |
物理 | 物理上窃取和破坏存储设备 | 机柜上锁和其他安全防护,备份措施 |
7.2 权限管理
一般数据库安全性管理从三个角度入手:
- 服务器OS登陆身份验证
- 数据库DBMS登陆身份验证
- 数据库DBMS权限管理
权限管理属于自定义式(Discretionary)的访问控制,还有一种机制是强制(Mandatory)访问控制(从安全模型、数据对象标签等角度)
我们主要讨论数据库的权限管理,不难想到,数据库有以下一些权限:
- 读数据权限
- 插入数据权限
- 修改数据权限
- 删除数据权限
- 创建删除索引权限
- 关系创建权限
- 关系修改权限
- 关系删除权限
- 等等
前面提到的视图算是一种权限管理机制(用户访问符合授权的视图),除此之外用授权图来表示权限管理等级也是常用方法(用户和DBA均参与,略)
7.3 SQL安全性
概念性的部分结束,下面进入复习基础的SQL数据库安全管理操作
(1)授权
SQL基本授权语句的语法如下,执行授权语句的用户必须已经获取相应操作的授权权力才能授权(DBA有所有权力):
grant <privilege list> on <relation name or view name> to <user list>;
包括了:
- select
- insert
- update
- delete
- references,即外键声明权限
- usage,允许使用特殊的域(某些自定义域?)
- all privileges,即所有可能的权限
- with grant option(后缀),即对某操作的授权权力
可以是以下三种格式:
- user-id:用户唯一标识编号
- public:所有有效用户
- role:角色
角色(Role)是SQL-99中引入的概念,它用于用户组别权限管理和权限层次管理(by the way,这两个是根据我理解自己造的词)
我们先看一个role分配权限的例子:
create role worker;
create role manager;
grant select on Staff_Account to worker;
grant update, insert, delete on Staff_Account to manager;
grant worker to manager;
grant worker to U1, U2, U3;
grant manager to U0;
create role worker;
和create role manager;
创建普通员工和经理两个角色,接着授予普通员工在表Staff_Account上的select权限,然后授予经理在表Staff_Account上的update、insert和delete权限
接下来grant worker to manager;
是角色间的授权,也就是把worker的所有权力都赋予manager,然后最后授予U1、U2、U3普通员工的角色以及授予U0经理的角色(即赋予他们相应角色的权利)
那么上例中,
用户组别权限管理是指把现实身份相同的U1、U2、U3分成一组,直接分配给他们worker的权力。那么如果新来一个普通员工U4就不必再去思考赋予给他什么权力而是直接授予他worker的身份即可。涉及多个表的不同的权限分配可能会很复杂,我们只用对同一个组别的统一的身份授权,再去管理用户身份即可管理复杂的权限分配。
而权限层次管理是利用用户现实身份的层次关系,借助面对对象设计中继承的思想来划分权限的层次,让权限层次清晰分明的管理方法。具体到上例来说就是经理也是员工,只是是特殊身份的员工,那么manager身份的人可以继承worker身份已经分配的权力。权限层次管理的好处在于让我们对待manager角色时只需要考虑他的特殊权限即可。
另外需要注意的是,授予关于视图的权限并不意味着授予其基本表的响应权限
(2)取消授权
SQL取消授权的基础语法是:
revoke <privilege list> on <relation name or view name> from <user list> [restrict|cascade];
和和上小节定义一致,而restrict(限制)和cascade(级联)后缀的含义和我们在学习外键时的含义相同:restrict就是不向后传播,cascade就是说用户X授予Y权限A,一旦revoke了X的A权限那么Y的A权限也被取消
(3)SQL权限管理的局限性
SQL的权限管理有自己的缺陷,其中主要有:
- 权限的粒度不够细化,即无法细致到某个关系中某个元组的权限:比如学生只能查看成绩表中自己的成绩,这个需求SQL的权限管理就无法很好的满足
- 某一个应用的所有端系统用户都映射到同一个数据库用户,即角色划分很难根据用户定制
7.4 其他安全管理措施
还有一个常见的数据库安全管理措施叫做审计跟踪(Audit Trail),即DBMS在特殊文件或数据库中记录每个用户的具体操作,那么DBA可以查看记录是否越权等,在数据库恢复中我们也经常使用审计跟踪的手段(见后续章节)