Skip to main content

数据库安全性

不安全因素:

  1. 非授权对数据库的恶意破坏
  2. 数据库数据泄露
  3. 安全环境的脆弱性

数据库安全机制

自主存取控制

采用权限授予机制,让不同用户对不同的数据库或者对不同表结构或者列具有不同的存取权限,事先对用户的权限行为定义。通过权限授予、回收指令实现该功能。

  • 用户
grant (权限) on table (表名) to (用户) (with grant option);
grant select on table sc to public; --授予所有用户权限
grant select, delete on table studednt to manager1; --不具备授予其他用户的权限
grant select, delete on table studednt to manager2 with grant option; --具有授予其他用户的权限

回收权限的方法:

tip

要注意的一点是每一个用户所获得的权限或者给出去的权限都是独立唯一的,比如user3获得了来自user1的select权限和来自user2的select和delete权限,当回收的时候注意如果仅回收来自user1的权限,那么user2给user3的权限并不会影响,因为权限在数据库中也是一条记录,不同记录之间是相互独立的.

revoke (权限) on table (表名) from (用户) (cascade);
revoke select on table sc from manager1 cascade; --回收所有manager1给出去的权限
revoke select on table sc from manager1; --只回收manager1的权限。
  • 角色

角色通常指的是一类人,通过sql语句也能进行权限赋予,通过角色可以同时给多个用户赋予权限。


--创建角色
create role R1;
--赋予权限
grant select on sc to R1;
grant R1 to tearcher, student, kids;

--回收权限
revoke select on sc from R1;

强制存取控制

对数据库对象标记密级,对用户授予某个级别的许可证。通过用户和数据库对象的密级对应规则来决定访问权限。

  • 主体: 数据库系统当中的用户。
  • 客体: 数据库系统中的实体,如:表、索引、视图、存储文件等。

敏感度标记(理解为保密等级): 主要分为四级:绝密、机密、可信、公开

主体的等级叫做许可证级别,客体的等级叫做密级。

  • 规则:
    1. 主体的等级\ge客体的等级的时候才能相应的客体(只有足够权限之后才能读取到对应的内容)
    2. 主体的等级\le客体的等级的时候才能相应的客体(如果高权限的主体写入低权限的客体,那么就会把保密等级比较高的数据暴露给了等级比较低的客体,相当于数据泄露了,是不对的。所以才有上面的规则。)
    3. 注意题目当中级别的排列先后顺序,是数字大权限高还是数字小权限高

审计

对数据库的所有操作都记录道审计日志当中,可以通过查询审计日志来看到之前有哪些操作的行为。同时也是通过日志文件来对数据数据进行备份或者恢复。