基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
身份鉴别
更新时间:2026-09-09 10:31:44
本文介绍了 OceanBase 数据库 MySQL 模式下的身份标识与鉴别机制,包括用户鉴权、身份标识组成以及认证插件的使用。
身份标识与鉴别功能用于对登录数据库的用户进行身份验证,确认其是否能够与数据库用户进行关联,并基于关联用户的权限对数据访问活动进行安全控制。认证插件(Authentication Plugin)则用于用户密码验证环节。
用户鉴权
OceanBase 数据库的用户鉴权是指客户端在尝试访问 OceanBase 服务器时提供有效的用户凭证。如果 OceanBase 服务器确认提供的凭证有效,它将允许客户端访问 OceanBase 数据库。OceanBase 数据库使用一种叫做 MySQL Authentication Protocol(MAPI)的协议来进行用户鉴权。它是基于客户端机器上的 MySQL 客户端帐户来完成身份验证的,也就是说,只有拥有正确用户名和密码的客户端才可以连接到 OceanBase 服务器。当客户端发出连接请求时,OceanBase 服务器将发送一个随机的识别码到客户端。客户端必须使用正确的用户名和密码来解码这个识别码,然后将解码的结果发送回服务器。如果结果正确,OceanBase 服务器将允许客户端连接服务器。
身份标识
MySQL 模式中,一个 user 由 user_name 和 host 共同体组成。这里直接给出一个示例:创建 3 个具有相同用户名的用户。
示例如下:
create user 'u1'@'%' identified by '*******';
create user 'u1'@'10.xxx.xxx.1' identified by '*******';
create user 'u1'@'10.xxx.xxx.2' identified by '*******';
其中:
%:表示允许任何客户端 IP 连接该租户。10.xxx.xxx.1:表示只允许10.xxx.xxx.1这个 IP 连接该租户。10.xxx.xxx.2:表示只允许10.xxx.xxx.2这个 IP 连接该租户。
用户登录时,OBServer 节点会根据 user_name、client_ip 和 password 匹配,来控制用户登录。
认证插件
OceanBase 数据库在 MySQL 模式下支持通过认证插件(Authentication Plugin)来控制密码的哈希计算和验证方式。当前支持以下认证插件:
mysql_native_password:传统的密码认证插件,使用 SHA-1 哈希算法。
caching_sha2_password:基于 SHA-256 的密码认证插件,具有更高的安全防护等级。该插件从 V4.4.2 BP2 版本开始支持,可通过系统变量 default_authentication_plugin 将该插件设置为创建新用户时使用的默认插件。该插件具备以下特性:
- SHA-256 哈希算法:使用更强的 SHA-256 算法替代 SHA-1,并且在生成哈希值时附加随机值(Salt)。
- 双重认证模式:支持快速认证(基于哈希缓存)和完整认证(基于存储层哈希,使用多轮 SHA-256 计算)。
- 安全传输:支持 SSL 和 RSA 加密传输用户密码。
- 密码缓存:服务端缓存已认证用户的哈希值,提升后续认证性能。
- 迭代次数可调:可通过系统变量 caching_sha2_password_digest_rounds 控制存储层哈希的 SHA-256 迭代次数(默认 5000)。
ob_sm3_password:该插件在认证协议与状态机上完全复用
caching_sha2_password(AuthSwitch、快速认证/完整认证、TLS/RSA 传密),但算法与元数据保持独立。该插件具备以下特性:- SM3 哈希算法(GB/T 32905-2016):替代 SHA-256,用于密码存储与认证校验。
- 双重认证模式:快速认证(内存缓存)+ 完整认证(磁盘存储串 + SSL/RSA 传密)。
- 迭代次数可调:可通过系统变量 ob_sm3_password_digest_rounds 控制
ob_sm3_password认证插件生成密码认证字符串时执行的 SM3 迭代次数(默认 5000)。
说明
对于 V4.4.2 版本,从 V4.4.2 BP3 版本开始支持认证插件
ob_sm3_password。
组件与驱动版本要求
使用 caching_sha2_password、ob_sm3_password 认证插件时,数据库组件与客户端驱动需满足以下版本要求:
| 组件/驱动 | caching_sha2_password | ob_sm3_password |
|---|---|---|
| OceanBase 数据库代理(ODP) | V4.4.0 及以上版本 | V4.4.2.0 及以上版本 |
| OBClient | V2.2.13 及以上版本 | V2.2.14 及以上版本 |
| libobclient | V2.2.13 及以上版本 | V2.2.14 及以上版本 |
| OB-JDBC | V2.4.18 及以上版本 | V2.4.20 及以上版本 |
示例
在创建或修改用户时,可以通过 IDENTIFIED WITH auth_plugin 语法指定认证插件。如果未通过 default_authentication_plugin 变量指定,默认使用 mysql_native_password。
创建用户
user1,指定使用caching_sha2_password认证插件(V4.4.2 BP2 起支持)。obclient> CREATE USER user1 IDENTIFIED WITH caching_sha2_password BY '*******';创建用户
user2,指定使用mysql_native_password认证插件。obclient> CREATE USER user2 IDENTIFIED WITH mysql_native_password BY '*******';修改用户
user2的认证插件。obclient> ALTER USER 'u1'@'%' IDENTIFIED WITH caching_sha2_password BY '*******';创建用户
sm3_user,显式指定使用ob_sm3_password。obclient> CREATE USER sm3_user IDENTIFIED WITH ob_sm3_password BY '******';查看用户的认证插件信息。
obclient> SELECT user, plugin, authentication_string FROM mysql.user WHERE user LIKE 'user_%';
相关文档
更多有关 IDENTIFIED WITH 语法的详细介绍,请参见 CREATE USER。