天天看點

開發指南—權限管理—賬号權限管理

建立賬号

文法:

CREATE USER [IF NOT EXISTS] user IDENTIFIED BY 'password';      

其中,user通過使用者名和主機名的組合

'username'@'host'

确定了一個賬号,賬号規則如下:

  • username為建立的使用者名,使用者名遵循以下規則;
    • 大小寫敏感;
    • 長度必須大于等于4個字元,小于等于20個字元;
    • 必須以字母開頭;
    • 字元可以包括大寫字母、小寫字母、數字。
  • host指定了建立使用者可以在哪台主機上登入,使用者名一樣但是主機名不一樣也代表不同的賬号,需滿足以下規則:
    • HOST必須是純IP位址,可以包含_和%通配符(_代表一個字元,%代表0個或多個字元)。含有通配符的HOST需要加上單引号,例如lily@'0.9.%.%',david@'%';
    • 假設系統中有兩個使用者都符合目前準備登入的使用者,則以最長字首比對(不包含通配符的最長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個字元;
    • 字元可以包括大寫字母、小寫字母、數字、特殊字元(@#$%^&+=)。

示例:

mysql> CREATE USER 'user1'@'127.0.0.1' IDENTIFIED BY '123456';
mysql> CREATE USER IF NOT EXISTS 'user2'@'%' identified by '123456';      

在PolarDB-X控制台建立完資料庫之後,系統會自動在該資料庫下建立兩個系統賬号:管理者賬号和隻讀賬号。這兩個賬号是系統内置的,不能删除,不能修改其權限,規則如下:

  • 管理者賬号的名字跟資料庫名一緻,比如資料庫名是easydb,管理者賬号的名字就叫easydb;
  • 隻讀賬号的名字是資料庫名加上_RO字尾,比如資料庫名是easydb,隻讀賬号的名字就叫easydb_RO。

修改賬号密碼

SET PASSWORD FOR user = PASSWORD('auth_string')      
mysql> SET PASSWORD FOR 'user1'@'127.0.0.1' = PASSWORD('654321');      

删除賬号

DROP USER user;      
mysql> DROP USER 'user2'@'%';      

授予賬号權限

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權限。
mysql> GRANT SELECT,UPDATE ON `db1`.* TO 'user1'@'127.0.0.1';      

檢視賬号權限

SHOW GRANTS [FOR user];      

可以使用current_user()來擷取目前使用者。

mysql> 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' |
+------------------------------------------------------+
mysql> 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 TO user;      
mysql> REVOKE UPDATE ON db1.* FROM 'user1'@'127.0.0.1';
mysql> 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' |
+----------------------------------------------+