> For the complete documentation index, see [llms.txt](https://288167.gitbook.io/sql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://288167.gitbook.io/sql/di-si-zhang-shu-ju-ku-an-quan-xing/shu-ju-ku-an-quan-xing-kong-zhi.md).

# 数据库安全性控制

## 4.2.1 用户标识与鉴别

§用户标识：由用户名和用户标识号组成（用户标识号在系统整个生命周期内唯一）

### 用户身份鉴别的方法

1.静态口令鉴别

&#x20;    静态口令一般由用户自己设定，这些口令是静态不变的

2.动态口令鉴别

&#x20;    口令是动态变化的，每次鉴别时均需使用动态产生的新口令登录数据库管理系统，即采用一次一密的方法

3.生物特征鉴别

&#x20;    通过生物特征进行认证的技术，生物特征如指纹、虹膜和掌纹等

4.智能卡鉴别

&#x20;   智能卡是一种不可复制的硬件，内置集成电路的芯片，具有硬件加密功能

## 4.2.2 存取控制

### 存取控制机制组成

* 定义用户权限
  * 用户对某一数据对象的操作权力称为权限 ，DBMS提供适当的语言来定义用户权限，存放在数据字典中，称做安全规则或授权规则
* 合法权限检查
  * 用户发出存取数据库操作请求，DBMS查找数据字典，进行合法权限检查v用户权限定义和合法权检查机制一起组成了  DBMS的安全子系统

### 常用存取控制方法 ：

自主存取控制（Discretionary Access Control ，简称DAC）&#x20;

* C2级&#x20;
* 用户对不同的数据对象有不同的存取权限&#x20;
* 不同的用户对同一对象也有不同的权限&#x20;
* 用户还可将其拥有的存取权限转授给其他用户

强制存取控制（Mandatory Access Control，简称 MAC）&#x20;

* B1级&#x20;
* 每一个数据对象被标以一定的密级&#x20;
* 每一个用户也被授予某一个级别的许可证&#x20;
* 对于任意一个对象，只有具有合法许可证的用户才可以存取

## 4.2.3 自主存取控制方法

通过 SQL 的 GRANT 语句和 REVOKE 语句实现&#x20;

用户权限组成&#x20;

* 数据对象&#x20;
* 操作类型&#x20;

定义用户存取权限：定义用户可以在哪些数据库对象上进行哪些类型的操作&#x20;

定义存取权限称为授权

&#x20;Ø一个或多个具体用户ØPUBLIC（全体用户）&#x20;

![关系数据库系统中存取控制对象 ](https://3440631364-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrxLmp19H_xOQyz4K-z%2F-Ls2EHV3DE8v3An1Jejl%2F-Ls2GO1z8rloD_RFTXmW%2Fimage.png?alt=media\&token=2cc364b0-8caa-4968-ba82-37b34de6f829)

## 4.2.4 授权与回收

### 1. GRANT

#### GRANT语句的一般格式：

&#x20;      GRANT <权限>\[,<权限>]...

&#x20;      \[ON <对象类型> <对象名>]

&#x20;      TO <用户>\[,<用户>]...

&#x20;      \[WITH GRANT OPTION];

语义：将对指定操作对象的指定操作权限授予指定的用户

#### 发出GRANT：

* DBA
* 数据库对象创建者（即属主Owner）
* 拥有该权限的用户

#### 按受权限的用户&#x20;

* 一个或多个具体用户&#x20;
* PUBLIC（全体用户）

#### WITH GRANT OPTION子句:&#x20;

* 指定：可以再授予&#x20;
* 没有指定：不能传播

#### 不允许循环授权

#### 对属性列的授权时必须明确指出相应属性列名

```
GRANT UPDATE(Sno), SELECT 
		ON TABLE Student 
		TO U4;
```

### 2.REVOKE

授予的权限可以由DBA或其他授权者用REVOKE语句收回

#### REVOKE语句的一般格式为：

&#x20;     REVOKE <权限>\[,<权限>]...

&#x20;     \[ON <对象类型> <对象名>]

&#x20;     FROM <用户>\[,<用户>]...;

#### 将用户U5的INSERT权限收回的时候必须级联（CASCADE）收回&#x20;

#### 系统只收回直接或间接从U5处获得的权限

### 3. 创建数据库模式的权限

#### DBA在创建用户时实现vvCREATE USER语句格式

&#x20;             CREATE  USER  \<username>

&#x20;           ［WITH］［DBA | RESOURCE | CONNECT］

注：

**CREATE USER不是SQL标准，各个系统的实现相差甚远**

![权限与可执行的操作对照表 ](https://3440631364-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrxLmp19H_xOQyz4K-z%2F-Ls2EHV3DE8v3An1Jejl%2F-Ls2HrsnJCLu2KqXCFse%2Fimage.png?alt=media\&token=c8b14716-cbcd-458e-bdd0-98742ad7f85d)

## 4.2.5 数据库角色

数据库角色：被命名的一组与数据库操作相关的权限 角色是权限的集合 可以为一组具有相同权限的用户创建一个角色 简化授权的过程

### 1.角色的创建

CREATE  ROLE  <角色名>

### 2.给角色授权

&#x20;GRANT  <权限>［，<权限>］…

&#x20;ON <对象类型>对象名&#x20;

&#x20;TO <角色>［，<角色>］…

### 3.将一个角色授予其他的角色或用户

GRANT  <角色1>［，<角色2>］…

TO  <角色3>［，<用户1>］…

［WITH ADMIN OPTION］

### 4.角色权限的收回

REVOKE <权限>［，<权限>］…

ON <对象类型> <对象名> FROM <角色>［，<角色>］…

## &#x20;4.2.6 强制存取控制方法
