本文介紹了賬號權限管理的相關操作。
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語句對高權限賬號進行回收。