SQL:数据库的安全性

SQL:数据库的安全性

1. 安全性概述

在一般计算机系统中,安全措施是一级一级层层设置的。

比如用户要求进入计算机系统时,系统首先根据输入的用户标识进行用户身份鉴定,只有合法的用户才准许进入计算机系统;对已进入系统的用户,数据库管理系统还要进行存取控制,只允许用户执行合法操作;操作系统也会有自己的保护措施;数据最后还可以以密码形式存储到数据库中。

下面讨论与数据库有关的安全性,主要包括用户身份鉴别、多层存取控制、审计、视图等等,这里主要将多层存取控制

2. 存取控制

数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。

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

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

自主存取控制方法: 用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。

强制存取控制方法:每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。

3. 自主存取控制方法

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

在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)

SQL:数据库的安全性

在SQL中首先用CREATE ROLE语句创建角色,然后用 GRANT 语句给角色授权,用REVOKE语句收回授予角色的权限

3.1 创建角色

创建角色的SQL语句格式为:

CREATE ROLE<角色名>

刚刚创建的角色是空的,没有任何内容。可以用GRANT为角色授权。

3.2 授予权限

授予权限用GRANT语句,其格式为:

GRANT <权限> [,<权限>]……
ON <对象类型><对象名> [,<对象类型><对象名>]……
TO <用户> [,<用户>]……
[WITH GRANT OPTION];

其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该GRANT语句的可以是数据库管理员,也可以是该数据库对象创建者(即属主owner),还可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。

如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。

#案例:把查询Student表的权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;

#案例:把对Student表和Course表的全部操作权限授予用户U2和U3
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;

#案例:把对表SC的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;

#案例:把查询Student表和修改学生学号的权限授予用户U4
GRANT UPDATE(Sno),SELECT
ON TABLE SC
TO U4;

3.3 收回权限

收回权限用REVOKE语句,其格式为:

REVOKE <权限> [,<权限>]……
ON <对象类型><对象名> [,<对象类型><对象名>]……
FROM <用户> [,<用户>]……[CASCADE|RESTRICT];
#案例:把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
FROM U4;

#案例:收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;

#案例:把用户U5对表SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
上一篇:Mysql8.0不支持grant all privileges on *.* to root@“%“ identified by “.“;


下一篇:zabbbixs数据库常用操作