创建数据库用户,是DBA必备的一项基础技能。本文旨在梳理清楚GoldenDB数据库在创建用户规范,以及我自己作为GoldenDB菜鸟踩的一些坑。
Table of Contents
1、关于用户的基本操作
1.1、创建用户
使用CREATE USER语句创建新用户。
例如:创建一个新用户zqd,分配权限的主机名是%,表示可以从任意远程主机登录,用户登录密码是Dlz@2025。
CREATE USER 'zqd'@'%' IDENTIFIED BY 'Dlz@2025'
在这里,《GoldenDB产品手册》有提到一点:“建议通过 insight 页面创建用户并进行管理”。 但没有再进行过多描述,关于这一点本篇文章会在下文中做出解释。
1.2、用户授权
使用 GRANT 语句对用户授权。
例如:授予zqd用户对test数据库和表的所有操作权限。
GRANT ALL PRIVILEGES ON test.* to 'zqd'@'%';
例如:授予zqd用户对test数据库t1表的SELECT、INSERT权限、
GRANT SELECT,INSERT ON test.t1 TO 'zqd'@'%';
在这里,虽然《GoldenDB产品手册》没有提到,但可以在授权完成后,执行 “FLUSH PRIVILEGES;” 命令,刷新权限。
1.3、取消用户权限
使用 REVOKE 语句取消用户权限。
例如:取消zqd用户所有权限。
REVOKE ALL ON *.* FROM 'zqd'@'%';
1.4、查询用户权限
使用 SHOW GRANTS 语句查询用户权限。
例如:查询 zqd 用户权限。
SHOW GRANTS FOR 'zqd'@'%';
1.5、删除用户
使用 DROP USER 语句删除用户。
例如:删除 zqd 用户。
DROP USER 'zqd'@'%';
2、手册里没展开的细节
《GoldenDB产品手册》中在用户操作章节有提到 “建议通过 insight 页面创建用户并进行管理”。 但没有再进行过多描述,这是为什么呢?
2.1、遭遇情况
前些时间,我在GoldenDB测试环境中使用CREATE USER创建过一个新用户,并在赋权完成后将用户密码交给了研发人员。但很快研发人员反馈说使用该用户连接不上GoldenDB数据库。
于是我使用mysql命令行方式进行连接测试,发现果真连接不上。
mysql -h192.168.1.1 -P6606 -uzqd -p
在一番思考后,在GoldenDB数据库的insight管理页面中的【租户管理】->【账号管理】中,创建账号并授权。再次使用mysql命令行方式进行连接测试,连接成功。让研发人员再次测试,也成功了。
2.2、查找原因
虽然问题解决了,但还是想搞清楚为什么。
2.2.1、服务端口连接失败
我先是在测试环境中又尝试多次,终于发现一个细节:虽然使用GoldenDB数据库实例的服务端口连接失败,但是使用GoldenDB数据库的DN端口却是可以连接上。而且创建的用户并没有出现在 insight 管理界面的【账号管理】中。
2.2.2、GoldenDB CN的透传模式
在多方请教与查阅资料后,得知了这一问题的原因:在GoldenDB CN透传模式下,使用非内置用户,在mysql命令行创建的用户都会出现这个问题。
-
那什么是 CN 透传模式?
按照墨天轮 吾亦可往 GoldenDB专家的回答这指的是在透传模式下,CN不参与其他动作,前后端链路绑定,CN将SQL语句直接转发至后端DN。且集中式模式集群的CN只有透传模式(单分片租户,且无GTM节点),而我所用的测试环境正好是集中式模式集群。 -
那什么是非内置用户?
除了dbproxy、super、dbagent、repl、mds2proxy、root、gdbquery2db这些内置用户以外的其他用户都属于是非内置用户。
2.2.3、低级错误
在了解了以上信息后,我很疑惑:我用的就是super这个内置用户,按逻辑不应该出现这种问题。在一番排查和请教后,终于发现问题所在。
- 错误的直连DN
我在使用命令行创建用户的操作是,登录GoldenDB数据库的DN服务器,切换到DN安装用户下,执行下面命令进入mysql命令行:
mysql -usuper -p
这种方式,是默认以DN的端口连接到了当前的DN而已。而官方也禁止直接连接DN,这很有可能造成元数据不一致,从而导致更严重的问题。
- 正确的方式
正确的方式应该是在命令行中,指定主机Ip、服务端口,且以super或者dbproxy用户进入mysql命令行创建新用户。
mysql -h192.168.1.1 -P6606 -usuper -p
2.3、问题解决
以2.2.3步骤中正确的方式进入mysql命令行后,再创建的用户就可以进行正常连接了。并且创建完成后,在insight管理页面的【租户管理】->【账号管理】中也会出现该用户信息。
GoldenDB新手使用 CREATE USER 方式创建新用户时,确实容易出错,所以这也是官方产品手册建议在insight中创建新用户的原因之一吧。




