欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

05_数据库安全性

程序员文章站 2022-05-10 13:08:18
...

1. 数据库安全性概述

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄漏, 更改或破坏.

1.1 数据库的不安全因素

  • 非授权用户对数据库的恶意存取和破坏.
  • 数据库中重要或者敏感的数据被泄漏.
  • 安全环境的脆弱性.

2. 数据库安全性控制

2.1 用户身份鉴别

​ 用户身份鉴别是数据库管理系统提供的最外层的安全保护措施, 每个用户在系统中都有一个用户标识, 每个用户标识是由一个用户名和一个用户标识号(UID)两部分组成, UID在系统的整个生命周期内是唯一的,系统鉴别是指由系统提供一定的方式让用户标识自己的名字或者身份, 然后在每次用户登录系统时都要由系统进行身份核对, 通过鉴定后才可以提供使用数据库管理系统的权限.

鉴别方法 : 静态口令法(用户名,密码) , 动态口令鉴别(短信验证码, 身份令牌等), 生物特征鉴别(指纹,虹魔等), 智能卡鉴别.

2.2 存取控制

存取控制就是将数据库操作的权限只授权给有资格的用户, 其他用户无法访问该数据.这主要是通过数据库系统的存取控制机制实现.

存取控制主要包括定义用户权限和合法权限检查两部分.

  1. 定义用户的权限, 并将权限登记到数据字典中.

  2. 合法权限检查, 每当用户发出请求, 数据库管理系统查找数据字典, 根据安全性规则进行合法权限校验, 若用户操作请求超出了定义的权限, 系统将拒绝执行此操作.

这两部分共同组成了数据库管理系统的存取控制子系统, C2 级别的数据库管理系统支持 自主存取控制, B1级别的数据库管理系统支持强制存取控制.

2.3 自主存取控制

大型数据库管理系统都支持自主存取控制, SQL 标准也为自主存取控制提供了支持, 因此自主存取控制主要通过 SQL 的 REVOKE 和 GRANT 实现.

用户权限由两个因素组成: 数据库对象和操作类型.即定义一个用户可以在那些数据库对象上进行那些类型的操作.

存取控制的对象不仅有数据本身(表数据,数据列上的数据)还有数据库模式(包括数据库,基本表,视图和索引的创建等).

05_数据库安全性

2.4 授权: 授予与收回

  1. Grant : 向用户授权

格式:

grant 
	<权限> [,<权限>]... 
on 
	<对象类型> <对象名> [,<对象类型> <对象名>]... 
to 
	<用户>[,<用户>]... 
	[with grant option]

如果指定了 with grant option 子句, 则获得某种权限的用户还可以将这种权限再授予给其他的用户. 如果没有指定则不能传播该权限, 但是不允许循环授权.

05_数据库安全性

例子 :

1_ 把查询 Student 表和 Course 表的全部权限授予用户 U2 和 U3

grant all privileges on table student, course to u2, u3;

2_ 把对表 SC 的查询权限授予所有用户

grant select on table sc to public;

3_ 把查询 Student 表和修改学生学号的权限授权给用户 U4

grant update(sno), select on table student to u4;

4_ 把对表 SC 的 insert 权限授予 U5 用户, 并允许将此权限再授予其他用户

grant insert on table sc to U5 with grant option;

  1. REVOKE : 权限收回

格式:

revoke <权限> [,<权限>]...
on <对象类型> <对象名> [,<对象类型> <对象名>]...
from <用户> [<用户>]... 
[cascade|restrict]

例子:

​ 收回所有用户对表 SC 的查询权限

​ revoke select on table sc from public;

2.5 数据库角色

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

在 SQL 中首先用 create role 语句创建角色,然后用 grant 语句给角色授权,用 revoke 语句收回授予角色的权限。

1_ 角色的创建

ceate role <角色名>

create role R1;

2_ 给角色授权

grant <权限> [,<权限>]… on <对象类型> <对象名> to <角色> [,<角色>]…

grant select on table student to R1;

3_ 将一个角色授予其他的用户或者角色

grant <角色> [,<角色>]… to <角色> [,<用户>]… [with admin option]

grant R1 to 王平,张明;

4_ 角色权限的收回

revoke <权限> [,<权限>]… on <对象类型> <对象名> from <角色> [,<角色>]…

revoke R1 from 王平;

5_ 角色权限修改

grant delete on table student to R1; 为角色R1添加删除学生的操作。

revoke select on table student from R1; 收回R1中对学生表的查询操作。

2.6 强制存取控制

自主存取控制能够通过授权机制有效的控制敏感数据的存取, 但是由于用户对数据的存取权限是自主的, 用户可以*的决定将数据的存取权限授予何人, 以及决定是否也将授权的权限授予给他人.

要解决这一问题, 就需要对系统控制下的所有主客观实施强制存取控制策略.

在强制存取控制中, 数据库管理系统所管理的全部实体被分为主体和客体两大类.

主体是系统中的活动实体, 既包括数据库管理系统的所管理的实际用户, 也包括代表用户的各个进程.

客体是系统中的被动实体, 是受主体控制的, 包括文件, 基本表, 索引, 视图等.

对于主体和客体, 数据库管理系统为他们的每个实例指派一个敏感度标记.

敏感度标记被分为若干等级 : 绝密 TS, 机密 S, 可信 C, 公开 P , TS >= S >= C >= P敏感度逐渐降低.

主体的敏感度标记称为许可证级别, 客体的敏感度级别称为密级.

对客体的存取规则 :

1_ 仅当主体的许可证级别大于或者等于客体的密级时, 主体才能读取相应的客体.

2_ 仅当主体的许可证级别小于或者等于客体的密级时, 该主体才能写相应的客体.

强制存取控制是对数据本身进行密集标记, 无论数据如何复制, 标记与数据是不可分的整体, 只有符合密级标记要求的用户才可以操纵数据, 从而提供了更高级别的安全性.

3. 视图机制

可以为不同的用户定义不同的视图, 把数据对象限制在一定的范围内, 也就是说, 通过视图机制把要保密的数据对无权存取的用户隐藏起来, 从而自动对数据提供一定程度的安全保护.

4. 审计

审计功能就是数据库管理系统达到 C2 以上的安全级别必不可少的一项指标.

审计功能把用户对数据库的所有操作自动记录下来放入审计日志中, 审计可以利用审计日志监控数据库中的各种行为, 重现导致数据库现有状况的一系列事件, 找出非法存取的人, 时间和内容等.

4.1 审计事件

服务器事件 : 审计数据库服务器发生的事件, 包含数据库服务器的启动, 停止, 数据库服务器配置文件的重载等.

系统权限 : 对系统拥有的结构或者模式对象进行操作的审计, 要求该操作的权限是通过系统权限获得的.

语句事件 : 对SQL语句 如 DDL DML DQL 以及 DCL 语句的审计

模式对象事件 : 对特定模式对象上进行的 select 或者 DML 操作的审计, 模式对象包括表, 视图, 存储过程, 函数等, 模式对象不包括依附于表的索引 约束 触发器 分区表等.

4.2 审计功能

基本功能 : 提供多种审计查阅方式, 基本的, 可选的, 有限的 等等.

提供多套审计规则, 审计规则一般在数据库初始化时设定, 以方便审计员审计.

提供审计分析和报表功能.

审计日志管理功能 : 防止审计员误删审计记录.

系统提供查询审计设置及审计记录信息的专门视图.

4.3 AUDIT 语句和 NOAUDIT 语句

AUDIT语句用来设置审计功能, NOAUDIT 语句则取消审计功能.

审计一般分为用户级审计和系统级审计, 用户级审计是任何用户都可以设置的审计, 主要是用户针对自己创建的数据库表或者视图进行审计, 记录所有用户对这些表或者视图的一切成功或者不成功的操作.

系统级审计只能由管理员设置, 用来监测成功或者失败的登录要求, 监测授权和收回操作以及其他数据库级权限下的操作.

5. 数据加密

加密的基本思想是根据一定的算法将原始数据 – 明文, 变换为不可以直接识别的格式 – 密文, 从而使得不知道解密算法的人无法获知数据的内容.

主要分为存储加密和传输加密.

5.1 存储加密

存储加密一般提供透明和非透明两种存储加密方式, 透明存储加密是内核级加密保护方式, 对用户完全透明, 非透明存储加密则是通过多个加密函数实现的.

5.2 传输加密

在BS系统中, 数据库用户与服务器之间若采用明文方式传输数据, 容易被恶意用户截获篡改, 为了保证二者之间的安全数据交换, 数据库管理系统提供了传输加密功能.