零基础OceanBase数据库入门(5):MySQL模式用户创建与权限管理

上一篇我们完成了MySQL 模式租户下的数据库创建,已经有了存放业务数据的 "容器"。但在实际生产中,绝对不能用root账号直接操作业务库,合理创建用户、精细化分配权限,才是数据库安全运维的基础。

本篇结合OceanBase官方demo与单机版文档,带你从零学会:创建用户、授予不同层级权限、查看权限、基础用户运维,全程贴合MySQL使用习惯,新手也能快速上手。

一、 2个核心前提

  1. 谁有资格创建用户

只有拥有CREATE USER系统权限的用户才能创建用户,默认只有:

  • 集群管理员

  • 租户管理员(如租户内root用户)

  • 普通用户需被授予CREATE USER权限后,才可创建新用户

  1. 用户名命名规则(官方强制要求)
  • 唯一性:用户名在租户内唯一,不同租户可同名,全局唯一标识为用户名@租户名

  • 长度限制:OBClient/ODC创建时≤64字节;OCP创建时2~64字符

  • 命名规范:字母开头,可含大小写、数字、下划线,建议见名知意(如app_read、dba_manager)

二、前置准备:登录目标业务租户

延续前序环境,登录我们创建的mysql_tenant租户(管理员账号):

nginx 复制代码
# 登录mysql_tenant 租户(密码替换为你设置的密码)obclient -h127.0.0.1 -P2881 -uroot@mysql_tenant  -p'123456' -A

登录成功后,即可执行用户创建与授权操作。

三、创建用户

创建用户使用CREATE USER语句,坚持最小权限原则,先创建再授权,不默认赋予高权限。

  1. 基础创建用户(最常用)
sql 复制代码
-- 创建用户app_user,密码设置为App@123456(生产用复杂密码)CREATE USER IF NOT EXISTS 'app_user' IDENTIFIED BY 'App@123456';
  • IF NOT EXISTS:避免用户已存在时报错,强烈建议添加

  • IDENTIFIED BY:指定明文密码,服务端会自动密文存储

  1. 带SSL安全策略创建
sql 复制代码
-- 创建用户并要求必须使用SSL连接CREATE USER 'sec_user' IDENTIFIED BY 'Sec@123456' REQUIRE SSL;

四、授予权限(4 种常用层级)

OceanBase MySQL模式权限分为全局、数据库级、表级、列级,用GRANT语句授权,完全兼容MySQL语法。

  1. 数据库级权限(最常用,最小权限)

授予用户仅操作指定数据库的权限,符合生产最小权限原则:

sql 复制代码
-- 授予app_user对ob_business库的 查/增/改 权限GRANT SELECT,INSERT,UPDATE ON ob_business.* TO 'app_user';-- 刷新权限,立即生效FLUSH PRIVILEGES;
  1. 全局权限(高权限,谨慎使用)
sql 复制代码
-- 授予dba_user所有库的所有权限(仅DBA使用,生产慎用)GRANT ALL ON *.* TO 'dba_user';
  1. 表级权限
sql 复制代码
-- 仅授予app_user对ob_business库下user表的查询权限GRANT SELECT ON ob_business.user TO 'app_user';
  1. 列级权限(精细化控制)
bash 复制代码
-- 仅授予查询id、name列,插入id、name列的权限(可以指定到库表)GRANT SELECT(id,name), INSERT(id,name) ON *.* TO 'app_user';
  1. 允许权限转授(可选)
sql 复制代码
GRANT SELECT ON ob_business.* TO 'app_user' WITH GRANT OPTION;

添加WITH GRANT OPTION,用户可将自身权限转授给其他用户。

五、查看用户与权限

官方提供3种查看方式,覆盖日常运维场景。

  1. 快速查看权限(SHOW GRANTS)
sql 复制代码
-- 查看当前用户权限SHOW GRANTS;-- 查看指定用户app_user的权限SHOW GRANTS FOR 'app_user';
  1. 查看用户全局权限(mysql.user视图)
sql 复制代码
-- 查看test的全局权限详情SELECT * FROM mysql.user WHERE user='test'\G

3 查看数据库级权限(mysql.db视图)

sql 复制代码
-- 查看test在各库的权限SELECT * FROM mysql.db WHERE user='test'\G

六、实用运维:用户常用操作

  1. 修改用户密码
sql 复制代码
-- 修改app_user密码ALTER USER 'app_user' IDENTIFIED BY 'NewApp@123456';
  1. 回收权限
sql 复制代码
-- 回收app_user对ob_business库的修改权限REVOKE UPDATE ON ob_business.* FROM 'app_user';FLUSH PRIVILEGES;
  1. 删除用户(谨慎操作)
sql 复制代码
-- 删除用户app_userDROP USER IF EXISTS 'app_user';

七、生产安全必看(官方建议)

  • 最小权限原则:只授予用户完成工作必需的权限,禁止随意授予ALL或*.*全局权限

  • 密码规范:使用大小写+数字+特殊字符组合,定期更换,禁止弱密码

  • 连接限制:生产不使用%放开所有IP,限定业务服务器IP

  • 禁止共享账号:一人一户,便于权限审计与问题追溯

  • 定期巡检:查看冗余用户、过期权限,及时清理

八、小结

本篇我们完成了OceanBase MySQL模式用户全生命周期管理,核心记住3点:

  • 创建:CREATE USER+强密码,坚持租户内唯一;

  • 授权:优先库级权限,遵循最小原则,用GRANT分配;

  • 查看:SHOW GRANTS快速查,mysql.user/db视图看详情。

用户与权限配置完成,下一步就可以进入创建数据表+插入业务数据环节,真正实现"存数据、用数据"。

往期回顾:

相关推荐
J2虾虾4 小时前
MySQL的基本操作
数据库·mysql
arvin_xiaoting5 小时前
OpenClaw学习总结_III_自动化系统_3:CronJobs详解
数据库·学习·自动化
杨云龙UP5 小时前
Oracle 中 NOMOUNT、MOUNT、OPEN 怎么理解? 在不同场景下如何操作?_20260402
linux·运维·数据库·oracle
jzwugang5 小时前
postgresql链接详解
数据库·postgresql
2601_949815335 小时前
MySQL输入密码后闪退?
数据库·mysql·adb
lifewange6 小时前
Redis的测试要点和测试方法
数据库·redis·缓存
_下雨天.6 小时前
MySQL高可用
数据库·mysql
刘~浪地球6 小时前
Redis 从入门到精通(六):列表操作详解
数据库·chrome·redis
颜颜yan_7 小时前
让数据库学会说“不“——金仓 SQL 防火墙深度解析
数据库·sql
霖霖总总7 小时前
[小技巧52]从 SQL 到结果:MySQL 8.0 查询执行全流程深度剖析
sql·mysql