SQL 安全性

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改和破坏。

一、数据库安全性概述

1.数据库不安全因素

  • 非授权用户对数据库的恶意存取和破坏

  • 数据库数据泄露

  • 安全系统的脆弱性

2.安全标准简介

计算机以及信息安全技术方面有一系列的安全标准,最有影响的是 TCSEC 和 CC 这两个标准。

二、数据库安全性控制

1.用户身份鉴定

用户身份鉴定是数据库管理系统提供的最外层安全保护措施,常见的用户身份鉴别方法有以下几种:

  • 静态口令鉴别
  • 动态口令鉴别
  • 生物特征鉴别
  • 智能卡鉴别

2.存取控制

数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,这主要通过数据库系统的存取控制机制实现。存取控制机制主要包括定义用户权限和合法权限检查两部分。

  • 定义用户权限:数据库系统必须提供适当的语言来定义用户权限,这些定义经编译后存储在数据字典中,被称作安全规则或授权规则。
  • 合法权限检查:每当用户发出请求后,数据库管理系统查找数据字典,根据安全规则进行合法权限检查,并批准或拒绝操作。

3.用户权限

用户权限主要由两个要素组成:数据库对象操作类型。定义一个用户的存取权限就是要定义这个用户可以在哪些数据库对象上进行哪些类型的操作。在数据库系统中,定义存取权限称为授权。

4.授权

SQL 中使用 grant 和 revoke 语句向用户授予或收回对数据的操作权限。

(1) grant

1
2
3
4
grant 权限
on 对象类型 对象名
to 用户名
[with grant option];
  • 将对指定操作对象的指定操作权限授予指定的用户
  • 如果指定了 with grant option ,则获得权限的用户可以进行权限再授权

(2) revoke

1
2
3
revoke 权限
on 对象类型 对象名
from 用户 [cascade|restrict];
  • 将授予用户的权限收回

  • cascade:级联,回收该用户授权的所有用户权限

    restrict:仅回收该用户的权限

(3) 创建数据库模式的权限

grant 和 revoke 用于向用户授予或收回对数据的操作权限。而更高层次的权限则是由数据库管理员在创建用户时实现。

1
create user 用户名 with [connect|resource|dba];
  • 只有超级用户才有权创建数据库用户
  • 数据库用户有三个权限:
    • connect:不能创建用户、模式、基本表,只能登录数据库
    • resource:不能创建用户、模式,可以创建基本表和视图
    • dba:超级用户,可以创建用户、模式、基本表

5.数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。

例如:

建立收银员、厨师、服务员等角色,为他们赋予相应的权限(能否进厨房、能否接触现金等),把这些权限写入到行为手册。

招聘到用户小李,不再需要把权限一条条告诉他,而是直接给他行为手册,让他学习相应角色的权限就好。

(1) 创建角色

1
create role 角色名;

(2) 给角色授权

1
2
3
grant 权限
on 对象类型 对象名
to 角色名;

(3) 把一个角色授权给其它角色或用户

1
2
3
grant 角色1
to 角色2|用户
[with admin option];
  • 授权后,角色 2 或用户将拥有 角色 1 的所有权限
  • with admin option 则获得权限的用户可以进行权限再授权

(4) 角色权限的收回

1
2
3
revoke 权限
on 对象类型 对象名
from 角色;

6.强制存取控制方法

由用户自主授权可能会导致数据的“无意泄露”,其根本原因在于,这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。

强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可,系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象

三、视图机制

可以为不同的用户定义不同的视图,将要保密的数据对无权存取的用户隐藏起来,实现数据的安全保护。

四、审计

审计功能把用户对数据库的所有操作自动记录下来。审计员可以利用审计日志监控数据库中的各种行为,重现数据库的时间,从而找出非法存取数据的人、时间和内容。

五、数据加密

数据加密是防止数据库数据在存储和运输过程中失密的有效手段。加密的基本思想是根据一定的算法将原始数据转换为不可以直接识别的格式。数据加密包括存储加密和传输加密。

参考

  • 数据库系统概论