---
title: "访问控制 - OceanBase 数据库 V4.1.0 | OceanBase 文档中心"
description: 访问控制 一个完善的数据库系统，除了需要管理用户外，也需要设置普通用户来进行数据库对象的操作，但普通用户必须拥有对应数据库对象的访问和操作权限，才能进行数据库对象的访问和操作，否则，用户无法进行任何操作。 Oracle 模式权限 权限分类 Oracle 模式的权限分为两类： 对象权限：对特定对象的操作权限，例如：某个…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.1.0

# 访问控制

更新时间：2024-06-28 17:15:47

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.1.0/zh-CN/700.reference/100.oceanbase-database-concepts/1100.database-security/300.access-control.md)  

一个完善的数据库系统，除了需要管理用户外，也需要设置普通用户来进行数据库对象的操作，但普通用户必须拥有对应数据库对象的访问和操作权限，才能进行数据库对象的访问和操作，否则，用户无法进行任何操作。

## Oracle 模式权限

### 权限分类

Oracle 模式的权限分为两类：

- 对象权限：对特定对象的操作权限，例如：某个表对象的 Alter、Select、Update 等权限。
 - 系统权限：允许用户执行在一个 Schema 或者任何 Schema 上进行特定的数据库操作的权限。

系统权限提供的权限比对象权限大得多。

### 权限转授

权限转授解决了授权者集中的问题。通过在授权时指定 with admin/grant option，可以同时授予用户将对应权限转授给其他用户的权限。回收对象权限时，要同时回收该用户转授给其他用户的对应权限，即 A 授予 B 权限，B 授予 C 权限，如果 A 收回 B 的权限，C 的权限也会被回收。回收系统权限时，不会级联回收转授的权限。

### 角色

为了方便权限的管理，设定了角色。角色是一组系统权限、对象权限的组合，角色中也可以包含其他角色。可以把角色授予用户，用户就拥有了角色里面的所有权限。系统在创建新租户时内置了三个默认的角色：

- DBA：拥有绝大多数的系统权限。
 - RESOURCE：拥有 Resource 角色的用户只可以在自己的 Schema 中创建数据库对象。
 - CONNECT：拥有 Connect 权限的用户可以登录数据库。

### 间接权限

用户的权限，包含直接授予的系统权限或者对象权限，也包含授予角色后，通过角色包获得的权限。大部分操作需要的权限，不论是直接授予的还是通过角色间接拥有的权限，都可以满足条件。对于下列场景，需要有直接权限才可以：

- 创建视图时，访问视图中的对象所需的权限。
 - 执行定义者权限的有名 PL 块中的语句所需的权限。

### 权限检查

在 Resolver 阶段，解析出一条 SQL 语句中所需的所有权限，逐个检查用户是否拥有对应的权限。对于系统操作的权限，如果权限不足则直接报错权限不足。对于访问对象的权限，如果用户在这个对象上没有任何权限，则报错对象不存在；如果用户在这个对象上有其他权限，只是没有需要的权限，则报错权限不足。

## MySQL 模式权限

### 与 Oracle 模式异同

MySQL 模式没有角色，权限模型相对简单。权限检查逻辑和 Oracle 一致。

### 权限分类

MySQL 模式的权限分为了 3 个级别：

- 管理权限：可以影响整个租户的权限，例如：修改系统设置、访问所有的表等权限。
 - 数据库权限：可以影响某个特定数据库下所有对象的权限，例如：在对应数据库下创建删除表，访问表等权限。
 - 对象权限：可以影响某个特定对象的权限，例如：访问一个特定的表、视图或索引的权限。

## 网络安全访问控制

OceanBase 数据库提供白名单策略，实现网络安全访问控制。租户白名单通过系统变量`ob_tcp_invited_nodes` 控制，支持列表形式取值，列表值之前使用英文逗号（,）分隔，例如：A,B,C,D。

用户登录时，OBServer 节点 会将用户的 IP 地址依次和 A、B、C、D 进行匹配校验。如果全部不匹配，则拒绝访问。只要有任意一个匹配成功，则表示通过白名单。

列表值支持以下赋值：

- IP 地址，例如：192.168.1.1。匹配时采用等值匹配，即用户 Client IP 等于该 IP 值时，才算匹配。
 - 包含百分号（%）或下划线（*）的 IP 地址，例如：192.168.1.% 或 192.168.1.*。匹配时采用模糊匹配，即类似 LIKE 语法。
 - IP/NETMASK 地址，例如：192.168.x.x/24 或者 192.168.x.x/255.255.xxx.x。匹配时采用掩码匹配，只有满足 Client_IP & NetMask == IP 才算匹配成功，类似于 MySQL 的掩码匹配。

## 行级访问权限控制

OceanBase 数据库兼容了 Oracle 的 Label Security 功能，可以在行级别对访问进行控制，保证读写数据的安全。

Label Security 是强制访问控制的一种方式，通过在表中添加一个 Label 列来记录每行的 Label 值，在访问时通过比较用户的 Label 和数据的 Label，达到约束主体（用户）对客体（表中的数据）访问的目的。

OceanBase 数据库提供了内置的安全管理员 `LBACSYS` 来管理和使用该功能，安全管理员可以通过创建安全策略、定义策略中的 Label、设置用户的 Label，来定制自己的安全策略。一个安全策略可以应用到多张表上，一张表也可以应用多个安全策略。每当一个安全策略被应用，这张表上自动会添加一列，用于该安全策略的访问控制。

#### 注意

目前仅 Oracle 模式支持 Label Security。

  上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
