暂无图片
暂无图片
13
暂无图片
暂无图片
暂无图片

OceanBase访问控制

OceanBase 2022-11-11
713

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

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.1.0/24 或者 192.168.1.0/255.255.255.0。匹配时采用掩码匹配,只有满足 Client_IP & NetMask == IP 才算匹配成功,类似于 MySQL 的掩码匹配。

行级访问权限控制

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

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

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

注意

目前仅 Oracle 模式支持 Label Security。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论