上一篇我们完成了MySQL 模式租户下的数据库创建,已经有了存放业务数据的 "容器"。但在实际生产中,绝对不能用root账号直接操作业务库,合理创建用户、精细化分配权限,才是数据库安全运维的基础。
本篇结合OceanBase官方demo与单机版文档,带你从零学会:创建用户、授予不同层级权限、查看权限、基础用户运维,全程贴合MySQL使用习惯,新手也能快速上手。
一、 2个核心前提
- 谁有资格创建用户
只有拥有CREATE USER系统权限的用户才能创建用户,默认只有:
-
集群管理员
-
租户管理员(如租户内root用户)
-
普通用户需被授予CREATE USER权限后,才可创建新用户
- 用户名命名规则(官方强制要求)
-
唯一性:用户名在租户内唯一,不同租户可同名,全局唯一标识为用户名@租户名
-
长度限制: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语句,坚持最小权限原则,先创建再授权,不默认赋予高权限。
- 基础创建用户(最常用)
sql
-- 创建用户app_user,密码设置为App@123456(生产用复杂密码)CREATE USER IF NOT EXISTS 'app_user' IDENTIFIED BY 'App@123456';

-
IF NOT EXISTS:避免用户已存在时报错,强烈建议添加
-
IDENTIFIED BY:指定明文密码,服务端会自动密文存储
- 带SSL安全策略创建
sql
-- 创建用户并要求必须使用SSL连接CREATE USER 'sec_user' IDENTIFIED BY 'Sec@123456' REQUIRE SSL;

四、授予权限(4 种常用层级)
OceanBase MySQL模式权限分为全局、数据库级、表级、列级,用GRANT语句授权,完全兼容MySQL语法。
- 数据库级权限(最常用,最小权限)
授予用户仅操作指定数据库的权限,符合生产最小权限原则:
sql
-- 授予app_user对ob_business库的 查/增/改 权限GRANT SELECT,INSERT,UPDATE ON ob_business.* TO 'app_user';-- 刷新权限,立即生效FLUSH PRIVILEGES;

- 全局权限(高权限,谨慎使用)
sql
-- 授予dba_user所有库的所有权限(仅DBA使用,生产慎用)GRANT ALL ON *.* TO 'dba_user';

- 表级权限
sql
-- 仅授予app_user对ob_business库下user表的查询权限GRANT SELECT ON ob_business.user TO 'app_user';

- 列级权限(精细化控制)
bash
-- 仅授予查询id、name列,插入id、name列的权限(可以指定到库表)GRANT SELECT(id,name), INSERT(id,name) ON *.* TO 'app_user';

- 允许权限转授(可选)
sql
GRANT SELECT ON ob_business.* TO 'app_user' WITH GRANT OPTION;

添加WITH GRANT OPTION,用户可将自身权限转授给其他用户。
五、查看用户与权限
官方提供3种查看方式,覆盖日常运维场景。
- 快速查看权限(SHOW GRANTS)
sql
-- 查看当前用户权限SHOW GRANTS;-- 查看指定用户app_user的权限SHOW GRANTS FOR 'app_user';
- 查看用户全局权限(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

六、实用运维:用户常用操作
- 修改用户密码
sql
-- 修改app_user密码ALTER USER 'app_user' IDENTIFIED BY 'NewApp@123456';

- 回收权限
sql
-- 回收app_user对ob_business库的修改权限REVOKE UPDATE ON ob_business.* FROM 'app_user';FLUSH PRIVILEGES;

- 删除用户(谨慎操作)
sql
-- 删除用户app_userDROP USER IF EXISTS 'app_user';

七、生产安全必看(官方建议)
-
最小权限原则:只授予用户完成工作必需的权限,禁止随意授予ALL或*.*全局权限
-
密码规范:使用大小写+数字+特殊字符组合,定期更换,禁止弱密码
-
连接限制:生产不使用%放开所有IP,限定业务服务器IP
-
禁止共享账号:一人一户,便于权限审计与问题追溯
-
定期巡检:查看冗余用户、过期权限,及时清理
八、小结
本篇我们完成了OceanBase MySQL模式用户全生命周期管理,核心记住3点:
-
创建:CREATE USER+强密码,坚持租户内唯一;
-
授权:优先库级权限,遵循最小原则,用GRANT分配;
-
查看:SHOW GRANTS快速查,mysql.user/db视图看详情。
用户与权限配置完成,下一步就可以进入创建数据表+插入业务数据环节,真正实现"存数据、用数据"。
往期回顾: