創建數據庫用戶,是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中創建新用戶的原因之一吧。




