OceanBase 安全审计之身份鉴别

news2025/4/20 14:40:30

本文主要以 MySQL 和 OceanBase 对比的方式,来介绍 OceanBase(MySQL 模式)安全体系中关于身份鉴别的相关内容,包括身份鉴别机制、用户名组成、密码复杂度、密码过期策略等。

作者:金长龙

爱可生测试工程师,负责 DMP 产品的测试工作。

用户鉴权

MySQL 常见的身份鉴别方式

鉴别方式说明
密码验证
Password Authentication
这是最常用的身份鉴别方式。用户在登录时提供用户名和密码,MySQL 将密码与数据库中存储的加密密码进行比对。
插件鉴别
Plugin Authentication
MySQL 还支持使用插件进行身份鉴别。这些插件可以实现不同的鉴别机制,如基于 SSL 证书的鉴别、Kerberos 鉴别等。
数据库鉴别
Native Authentication
在 MySQL 8.0 之后引入了基于插件的本地身份鉴别方式。用户的密码信息存储在 MySQL 的系统表中,而不再是之前的存储在 mysql.user 表中。
外部鉴别
External Authentication
MySQL 还支持通过外部身份鉴别机制进行登录,如基于操作系统账户的鉴别、LDAP 鉴别。

OceanBase下的身份鉴别机制

OceanBase 数据库目前只支持密码验证方式,使用的是 MySQL Authentication Protocol(MAPI) 协议进行用户鉴权。该协议基于客户端机器上的 MySQL 客户端帐户完成身份验证,要求客户端具有正确的用户名和密码才能连接到 OceanBase 服务器。下面是身份鉴权的具体过程:

身份鉴权流程

  1. 客户端发起连接请求到 OceanBase 服务器
  2. OceanBase 服务器发送随机字符串 (Nonce) 给客户端
  3. 客户端使用发送来的随机字符串以及正确的用户名和密码,进行哈希加密计算
  4. 客户端将加密后的 Token 发送回 OceanBase 服务器
  5. OceanBase 服务器验证客户端发送的解码结果是否正确
  6. 如果解码结果正确,OceanBase 服务器允许客户端连接服务器;否则拒绝连接请求

注意:
OceanBase 数据库当前支持的 MySQL 客户端版本为 5.5、5.6 和 5.7。当使用 MySQL 8.0 客户端连接 OceanBase 时,需要在连接命令上加 –default_auth=mysql_native_pasowrd。原因是 MySQL 5.6、MySQL 5.7 的默认加密算法是 mysql_native_password,而 MySQL 8.0 的默认加密算法是 caching_sha2_password

用户命名

用户命名规则

  1. 一个 useruser_namehost 共同组成,这点 MySQL 和 OceanBase 是一致的;
  2. MySQL 用户名最多包含 32 个字符,而 OceanBase 限制用户名不能超过 64 个字符。

下面我们看两个命名规则的例子。

使用举例

用户名的组成

用户名都是 u1host 不同,代表着三个不同用户。

create user 'u1'@'%' identified by '123456';
create user 'u1'@'localhost' identified by '123456';
create user 'u1'@'127.0.0.1' identified by '123456';

通过 current_user() 函数查询当前登录用户,可以看到用户标识为 user_name@host

长度限制

创建用户时,用户名长度超出限制,MySQL 和 OceanBase 的报错一致,提示 too long for user name

MySQL

OceanBase

密码强度评定

为了防止恶意的密码攻击,OceanBase 和 MySQL 都提供设置密码复杂度的相关功能,以此来提升数据库的安全性。 OceanBase 和 MySQL 分别通过如下的一系列变量限制密码的复杂度规则。

# OceanBase 4.1
obclient [oceanbase]> SHOW VARIABLES LIKE "validate_password%";
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | on    |
| validate_password_length             | 0     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 0     |
| validate_password_policy             | low   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.003 sec)
  
# MySQL 8.x
mysql [localhost:8031] {msandbox} ((none)) > SHOW VARIABLES LIKE "validate_password%";
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

差异对比

对比项OceanBaseMySQL
安装方式自带系统变量,可以直接配置。需要先安装 validate_password 组件(INSTALL COMPONENT ‘file://component_validate_password’;),然后才可以使用相关变量做密码限制>
参数个数6 个系统变量,没有变量 validate_password.dictionary_file7 个系统变量。 其中的 validate_password.dictionary_file 变量仅在 validate_password.policy=STRONG 时才会生效(目前 oceanbase 不支持 STRONG 策略)。
validate_password.policy 变量值支持配置 LOW、MEDIUM 两种密码检查策略支持配置 LOW, MEDIUM, STRONG 三种密码检查策略;其中 STRONG 就是在 MEDIUM 策略的基础上增加了字典文件的检查。

两种数据库的参数默认值大部分都不同。

密码过期策略

主要包括手动设置密码过期和设置全局的密码过期策略。

MySQL

支持手动设置用户密码过期。

# 手动设置密码过期
mysql [localhost:8031] {msandbox} ((none)) > alter user 'jeffrey'@'%' PASSWORD EXPIRE;
Query OK, 0 rows affected (0.04 sec)

# 密码过期后执行语句受限
mysql [localhost:8031] {jeffrey} ((none)) > show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

支持设置全局的密码过期策略:可以使用 default_password_lifetime 系统变量。

OceanBase

目前不支持密码过期的任何功能。

登录失败处理

对于多次登录失败的用户,数据库会锁定该用户,以便防止恶意的密码攻击,从而保护数据库,提升数据库的安全性。

OceanBase

OceanBase 设计了几个租户级的参数,用来控制用户连续错误登录的次数以及账户的锁定时间。这是 OceanBase 特有而 MySQL 没有的。主要是以下三个参数,可以通过命令查询(SHOW PARAMETERS LIKE "connection_control_%";)。

  • connection_control_failed_connections_threshold:指定用户连续错误登录的次数
  • connection_control_min_connection_delay:达到错误登录次数之后锁定用户的最小时长
  • connection_control_max_connection_delay:达到错误登录次数之后锁定用户的最大时长

在每次登录失败时,OBServer 日志都会有相应的记录。

[root@31aa8013555f log]# grep "denied" observer.log
[2023-05-04 09:32:18.689329] WDIAG [SERVER] load_privilege_info (obmp_connect.cpp:553) [782][MysqlQueueTh5][T1][Y0-0005FA34D4B800AC-0-0] [lt=11][errcode=-4043] User access denied(login_info={tenant_name:"sys", user_name:"root", client_ip:"127.0.0.1", db:"oceanbase", scramble_str:"?sE@PP"WqS*v7KUJQ8cj"}, ret=-4043)

另外也截了一段登录成功时的日志。

[2023-05-23 09:07:52.658015] INFO [SERVER] process (obmp_connect.cpp:369) [12383][MysqlQueueTh1][T1][Y0-0005FBC67C77F146-0-0] [lt=9] MySQL LOGIN(direct_client_ip="127.0.0.1", client_ip=127.0.0.1, tenant_name=sys, tenant_id=1, user_name=u1, host_name=%, sessid=3221576719, proxy_sessid=0, sess_create_time=0, from_proxy=false, from_java_client=false, from_oci_client=true, from_jdbc_client=false, capability=150974085, proxy_capability=49408, use_ssl=true, c/s protocol="OB_2_0_CS_TYPE", autocommit=true, proc_ret=0, ret=0)

MySQL

从 MySQL 8.0.19 开始,可以在 create useralter user 语句中使用 FAILED_LOGIN_ATTEMPTSPASSWORD_LOCK_TIME 选项为每个帐户配置所需的登录失败次数和锁定时间。

  • FAILED_LOGIN_ATTEMPTS:指定连续错误密码的次数
  • PASSWORD_LOCK_TIME:达到错误登录次数之后的锁定时长(单位天)

使用举例

CREATE USER 'u1'@'localhost' IDENTIFIED BY 'password'
  FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 3;
 
ALTER USER 'u2'@'localhost'
  FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME UNBOUNDED;

小结

通过如上几项的比较,OceanBase 身份鉴别目前只支持密码验证的方式,其他身份鉴别方式暂时不支持,密码验证方式基本和 MySQL 5.7 的逻辑一致,支持密码复杂度设置、登录失败处理等功能,暂不支持密码过期策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速掌握SQL语言——数据查询语言DQL

0️⃣前言 数据查询语言DQL是一种用于查询数据库中数据的语言,它是SQL的一部分,也是SQL中最常用的语言之一。 文章目录 0️⃣前言1️⃣介绍2️⃣使用3️⃣重要性4️⃣总结 1️⃣介绍 DQL(Data Query Language) 主要用于从数据库中…

为PyCharm IDE 配置三剑客:QtDesigner[可视化设计器]、PyUIC[可视化设计器ui文件转py代码]、PyRcc[资源文件转py代码]

过去一直在使用Eric6 PyQt5,然而最近它[已然是古董级的了]似乎有些不太正常, 像我这样有强迫症的人怎么可以容忍呢? 于是有了换IDE的想法,听说PyCharm是个高富帅,大家都很喜欢用它呢!于是乎才有了这篇文章。 前提条…

【C++ 笔记五】STL 标准模板库 —— 容器基础进阶

【C 笔记五】STL 标准模板库 —— 容器基础进阶 文接上文 【C 笔记四】STL 标准模板库 —— 容器基础 文章目录 【C 笔记五】STL 标准模板库 —— 容器基础进阶I - 简单回顾1.1 - 序列式容器(顺序容器)1.2 - 关联式容器 (关联容器)1.3 - 访问方法/对外接…

面试-java常见问题

JVM 配置 程序计数器:当前线程所执行的字节码的行号指示器java虚拟机栈:临时变量元空间:类常量池,运行时常量池方法区:类信息,静态变量堆:对象实例,Sting常量池等 类加载过程 加载->链接&am…

使用javacv中的ffmpeg实现录屏

今天突发奇想,想自己写一个录屏的软件,上次写了一个专门录音的Demo,但是要把声音和视频放到一起合成一个mp4文件,着实有一点艰难,所以就打算使用ffmpeg来写一个,而这篇博客中会顺便谈一谈我碰到的各种坑。 …

JVM面试题50道

1.JDK、JRE、JVM关系? Jdk (Java Development Kit) : java语言的软件开发包。包括Java运行时环境Jre。 Jre (Java Runtime Environment) :Java运行时环境,包括Jvm。 Jvm (Java Virtual Machine) :一种用于计算机设备的规范。 Java语言在不同…

JavaWeb小记——Tomcat

目录 Tomcat简介 Tomcat下载安装 Tomcat启动 Tomcat关闭 常见问题 项目发布 发布方式一 发布方式二 发布方式三 IDEA打war包 Tomcat和IDEA整合 IDEA发布动态项目 Tomcat简介 Tomcat是Apache基金组织下的一款免费的开源的且支持Servelet和JSP规范的服务器 Tomcat下…

Spark大数据处理学习笔记1.3 使用Scala集成开发环境

文章目录 一、学习目标二、搭建Scala的IntelliJ IDEA开发环境(一)启动IDEA(二)安装Scala插件(三)配置IDEA使用的默认JDK(四)创建Scala项目1、创建Scala项目 - ScalaDemo2、创建Scala…

跨平台潜能解锁:将Ionic框架与小程序容器相结合

Ionic是一个用于构建跨平台移动应用程序的开源框架。它结合了HTML、CSS和JavaScript等技术,帮助开发者创建具有原生应用体验的移动应用程序。Ionic提供了一套用户界面组件和工具,可用于构建高度交互和美观的移动应用界面。 Ionic基于Angular框架&#x…

为什么 Twitter 和 Facebook 的网站页面变得越来越像?

Twitter和Facebook这两个社交媒体平台在不同的领域取得了巨大的成功。Twitter以其独特的推文形式而闻名,而Facebook则以其广泛的社交网络和内容分享功能而著称。 然而,近年来,这两个平台在设计和布局上的相似之处越来越明显。为什么会出现这…

奖金高达534万!2023第四届全国人工智能大赛

2023第四届全国人工智能大赛 报名链接: https://www.datafountain.cn/special/NAIC2023?target13250069&specialNAIC2023 叮咚,已向您发送组队邀请!今年最值得参与的第四届全国人工智能大赛开放报名了,3道赛题奖金534万&…

又一重点项目,石岩新能源产业园建面61.6万平,配27班学校

近日,宝安区城市更新和土地整备局发布,关于石岩街道总部经济园区城市更新单元(一期南及二期)“工业上楼”单元规划(草案)已通过专班会议审议的公告。 公告显示,项目申报主体为深圳市开宝安区投资管理集团有限公司&…

信息系统项目管理师(软考高项)备考总结

简介 信息系统项目管理师,计算机技术与软件(高级)专业技术资格。 相关考试简称软考,该资质业内简称高项。 证书价值 自行百度吧,决定考的肯定知道他能带来什么价值了。 笔者是因为从事软件开发,服务政…

js的一些工具函数以及方法

部分方法复制于:20 个 JS 工具函数助力高效开发 reduce 举例:数组求和 let a[1,3,6,5,7]; let init0;//累加的初始值,默认为0,可不写 let ba.reduce((pre,cur,index,arr)>{console.log(当前要加序号:,index);cons…

左右排版的PDF,如何转换为单栏排版的word?

将左右排版的PDF转换为单行排版的WORD文字版需要进行以下步骤: 1. 使用PDF转换工具将PDF转换为WORD格式。有很多在线或离线的PDF转WORD工具可供选择,例如金鸣表格文字识别、Adobe Acrobat、Smallpdf、Zamzar等。 2. 打开WORD文档后,选择“页…

24个Jvm面试题总结及答案

1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每…

用Python将《青花瓷》的歌词生成词云图

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 因为上次有小伙伴问我,歌曲的歌词和评论怎么生成词云图,想买代码… 当时我就拒绝了,直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例,要对《青花瓷》歌词…

Nacos架构与原理 - 注册中心服务数据模型(2.x版本)

文章目录 服务(Service)和服务实例(Instance)定义服务服务元数据定义实例实例元数据持久化属性 集群(Cluster)定义集群 生命周期服务的⽣命周期实例的⽣命周期集群的⽣命周期元数据的⽣命周期 服务&#xf…

DM Ticket-大麦网自动购票工具 支持Docker一键部署

DM Ticket-大麦网自动购票工具 支持Docker一键部署 DM Ticket,一个大麦网演唱会自动购票工具,支持Docker一键部署,不过小白想要操作的话需要一点命令知识,作者的GitHub项目页面有很详细的介绍,感兴趣的同学可以到GitH…

反汇编分析——全局、局部、静态、堆变量

在可执行文件编译的时候就已经存储在固定的位置了,甚至还可以跨文件共享,因为他本身就是静态的,固定在文件当中的嘛 反汇编窗口就是直接拿指针解引用,也就是拿这个地址来访问的,直接寻址 自动变量,不用我们…