本文介紹了帳號許可權管理的相關操作。
PolarDB-X帳號和許可權系統的用法與MySQL 5.7一致,支援GRANT、REVOKE、SHOW GRANTS、CREATE USER、DROP USER、SET PASSWORD等語句。目前支援庫級和表級許可權的授予,全域層級和列層級許可權暫時不支援。
建立帳號
文法
CREATE USER [IF NOT EXISTS] user IDENTIFIED BY 'password';參數說明
參數user為通過使用者名稱和主機名稱的組合確定的帳號,格式為'username'@'host',帳號規則如下:
username為建立的使用者名稱,使用者名稱遵循以下規則:
大小寫敏感;
長度必須大於等於4個字元,小於等於20個字元;
必須以字母開頭;
字元可以包括大寫字母、小寫字母、數字。
host指定了建立的使用者可以在哪台主機上登入,使用者名稱一樣但是主機名稱不一樣也代表不同的帳號,帳號規則如下:
host必須是純IP地址,可以包含_和%萬用字元。含有萬用字元的host需要加上單引號,例如lily@'30.9.%.%',david@'%';
說明_代表一個字元,%代表0個或多個字元。
假設系統中有兩個使用者都符合當前準備登入的使用者,則以最長首碼匹配(不包含萬用字元的最長IP段)的那個使用者為準。例如系統有兩個使用者david@'30.9.12_.234'和david@'30.9.1%.234',在主機30.9.127.234上面登入david,則使用的是david@'30.9.12_.234'這個使用者;
開啟VPC時,主機的IP地址會發生變化。為避免帳號和許可權系統中的配置無效,請將HOST配置為‘%’來匹配任意IP。
參數password為使用者密碼,需滿足以下規則:
長度必須大於等於6個字元,小於等於20個字元;
字元可以包括大寫字母、小寫字母、數字、特殊字元(@#$%^&+=)。
樣本
CREATE USER 'user1'@'127.0.0.1' IDENTIFIED BY '123456';
CREATE USER IF NOT EXISTS 'user2'@'%' identified by '123456';修改帳號密碼
文法
SET PASSWORD FOR user = PASSWORD('auth_string')樣本
SET PASSWORD FOR 'user1'@'127.0.0.1' = PASSWORD('654321');不支援使用SQL語句修改高許可權帳號的密碼。
刪除帳號
文法
DROP USER user;樣本
DROP USER 'user2'@'%';不支援使用SQL語句刪除高許可權帳號。
授予帳號許可權
文法
GRANT privileges ON database.table TO user;參數說明
其中,參數privileges為具體權限類別型,資料庫權限等級從高到低依次是:全域層級(暫不支援)、資料庫級、表級和列層級許可權。PolarDB-X目前支援和表相關聯的8個基本許可權項:CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECT。
TRUNCATE操作需要有表上的DROP許可權;
REPLACE操作需要有表上的INSERT和DELETE許可權;
CREATE INDEX 和 DROP INDEX操作需要有表上的INDEX許可權;
CREATE SEQUENCE需要有資料庫級的建立表(CREATE)許可權;
DROP SEQUENCE需要有資料庫級的刪除表(DROP)許可權;
ALTER SEQUENCE需要有資料庫級的更改表(ALTER)許可權;
INSERT ON DUPLICATE UPDATE語句需要有表上的INSERT和UPDATE許可權。
樣本
GRANT SELECT,UPDATE ON `db1`.* TO 'user1'@'127.0.0.1';不支援使用SQL語句對高許可權帳號進行授權。
查看帳號許可權
文法
SHOW GRANTS [FOR user];可以使用current_user()來擷取目前使用者。
樣本
SHOW GRANTS FOR 'user1'@'127.0.0.1';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT, UPDATE ON db1.* TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+
SHOW GRANTS FOR current_user();
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT, UPDATE ON db1.* TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+回收帳號許可權
文法
REVOKE privileges ON database.table FROM user;樣本
REVOKE UPDATE ON db1.* FROM 'user1'@'127.0.0.1';
SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+不支援使用SQL語句對高許可權帳號進行回收。