数据库安全性

数据库安全性

数据库的特点之一是由数据库管理系统提供统一的数据保护功能来保护数据的安全可靠和正确有效。数据库的数据保护主要包括数据的安全性和完整性。

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

数据库的不安全因素

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

数据库安全性控制

  1. 用户身份鉴别
  2. 多层存取控制
  3. 审计
  4. 视图和数据加密

存取控制
存取控制机制主要包括定义用户权限和合法权限检查两部分,定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统

C2级的数据库管理系统支持自主存取控制,B1级的数据库管理系统支持强制存取控制

  1. 在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其它用户。因此自主存取控制非常灵活。
  2. 在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具体合法许可证的用户才可以存取。强制存取控制因此相对比较严格。

自主存取控制方法

用户权限是由两个要素组成的:数据库对象和操作类型。定义一个用户的存取权限就是要定义这个用户可以在哪些数据库对象上进行哪些类型的操作。在数据库系统中,定义存取权限称为授权。
在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据,属性列上的数据),还有数据库模式(包括数据库,基本表,视图和索引的创建等)。

关系数据库系统中的存取权限

数据类型

  • 数据库模式
    1. 模式:CREATE SCHEMA
    2. 基本表:CREATE TABLE, ALTER TABLE
    3. 视图:CREATE VIEW
    4. 索引:CREATE INDEX
  • 数据
    1. 基本表和视图:SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALL PRIVILEGES
    2. 属性列:SELECT, INSERT, UPDATE, REFERENCES, ALL PRIVILEGES

授权:授予与收回

  1. GRANT
    GRANT语句的一般格式为:

    1
    2
    3
    4
    GRANT <权限>,[,<权限>]...
    ON <对象类型> <对象名> [,<对象类型> <对象名>]...
    TO <用户>[,<用户>]...
    [WITH GRANT OPTION];

    其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该GRANT语句的还可以是数据库管理员,也可以是该数据库对象创建者(即属主owner),还可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC,及全体用户。如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其它的用户。如果没有指定WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。

    1
    2
    3
    4
    5
    6
    7
    8
    GRANT UPDATE(Sno), SELECT
    ON TABLE Student
    To U4
    GRANT INSERT
    ON TABLE SC
    TO U5
    WITH GRANT OPTION
  2. REVOKE
    REVOKE的一般格式为;

    1
    2
    3
    4
    5
    6
    7
    REVOKE <权限>[, <权限>]...
    ON <对象类型><对象名> [, <对象类型><对象名>]...
    FROM <用户>[,<用户>] ... [CASCADE|RESTRICT]
    REVOKE INSERT
    ON TABLE SC
    FROM U5 CASCADE;
  3. 创建数据库模式的权限
    创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现,创建用户的一般合适如下:

    1
    CREATE USER <username> [WITH] [DBA|RESOURCE|CONNECT];
  • 只有系统的超级用户才有权创建一个新的数据库用户
  • 新创建的数据库用户有三种权限:CONNECT, RESOURCE和DBA
  • CREATE USER命令中如果没有指定创建的新用户的权限,默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登陆数据库。由数据库管理员或其它用户授予他应用的权限,根据获得的授权的情况他可以对数据库对象进行权限范围内的操作。
  • 拥有RESOURCE权限的用户能创建基本表和视图,称为所创建对象的属主,但不能创建模式,不能创建新的用户。数据库对象的属主可以使用GRANT语句把该对象上的存取权限授予其它用户。
  • 拥有DBA权限的用户是系统中的超级用户,可以创建新的用户,创建模式,创建基本表和视图等;DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。
  1. 角色

    • 角色的创建:CREATE ROLE <角色名>
    • 给角色授权:

      1
      2
      3
      GRANT <权限> [, <权限>]...
      ON <对象类型> 对象名
      To <角色> [,<角色>]
    • 将一个角色授予其它的角色或用户

      1
      2
      3
      GRANT <角色1> [, <角色2>]...
      To <角色3> [, <用户1>]...
      [WITH ADMIN OPTION]

      如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其它的角色

    • 角色权限的收回

      REVOKE <权限> [, <权限>]...
      ON <对象类型> <对象名>
      FROM  <角色> [,<角色>]
      

      REVOKE动作的执行者或者角色的创建者,或者拥有在这个角色上的ADMIN OPTION