MariaDB使用者管理

stephenjwq發表於2018-12-12

root>mysql -p
Mariadb 的賬戶管理操作

CREATE USER:建立一個新賬戶併為其設定一個口令(可選操作):
CREATE USER account [IDENTIFIED BY ‘password’];
這條語句只是建立帳戶,未對帳戶進行任何許可權分配,許可權分配由 GRANT 語句完成。
示例:
 

 MariaDB [(none)]> CREATE USER angel IDENTIFIED BY ' angel ';
DROP USER:刪除一個帳戶及與之相關的全部許可權:
DROP USER account;
該語句並未刪除指定使用者可訪問到的任何資料庫及相關的資料物件。
示例:
 

 MariaDB [(none)]> DROP USER angel ;
RENAME USER:改變給定賬戶的名稱。
RENAME USER from_account TO to_account
示例:
 

 MariaDB [(none)]> RENAME USER ' angel .t1'@'127.0.0.1' TO ' angel.t1 @'%';
CREATE USER 等賬戶管理語句中的賬戶由一個使用者名稱和一個主機名組成,其格式為‘user_name’@’host_name’。

主機部分是指客戶從哪些主機去連線伺服器。如若限制某個使用者從指定的主機連線 MariaDB 服務:

MariaDB [(none)]> CREATE USER ' angel '@'localhost' IDENTIFIED BY ' angel ';
MariaDB [(none)]> CREATE USER ' angel '@'1 0.1.1.1 ' IDENTIFIED BY ' angel ';
第一條語句,建立一個名為 angel 的使用者,並限制其只可從本機進行連線操作;第二條一句,建立一個名為 angel 的使用者,並限制其只可從 ip 10.1.1.1 的客戶機上連線服務。雖然使用者名稱相同,實際上,他們並不是同一個賬戶,其對應的許可權也可能不盡相同。

當然很多情況下並不需要嚴格要求使用者只能從一臺主機連線伺服器。這個時候就可以用上萬用字元:

MariaDB [(none)]> CREATE USER ' angel '@' 10.1.1.1 .%' IDENTIFIED BY ' angel ';
MariaDB [(none)]> CREATE USER ' angel '@'%. angel web.cn' IDENTIFIED BY ' angel ';
MariaDB [(none)]> CREATE USER ' angel '@'%' IDENTIFIED BY ' angel ';
SQL 中 LIKE 的萬用字元 % 及 -,在此都可使用。如若使用 “%” 或 “-” 本身,則需使用 “\” 對其轉義。

上面第一條語句建立一個名為 angel 的使用者,並允許其在 10.1.1.1.* ip 段下的所有主機連線伺服器;第二條語句建立一個名為 angel 的使用者,並允許其能夠從 angel web.cn 域中的任意一臺主機連線伺服器;第三條語句建立了一個名為 angel 的使用者,並允許其可從任意一臺主機來連線伺服器。(第三種方式最為方便,但對系統最不安全。)

MariaDB 對賬戶授權

對賬戶授權需要使用GRANT語句,下面是 GRANT 語句的語法:

GRANT privileges (columns) ON what To account [IDENTIFIED BY ‘password’][REQUIRE encryption requirements] [WITH grant or resource management options];
GRANT 語句裡,如果使用者存在,GRANT 語句則將改變它的許可權;如果不存在 GRANT 語句則建立它,再將給定的許可權分配給它。

下面是 GRANT 語句最為常用的幾個語法元素。

privileges,授權賬戶的許可權。
columns,許可權將作用的資料列。如若需要列舉多個資料列,則用逗號分隔。
what,許可權的級別。
account,被授權的賬戶。account 的格式為 ‘user_name’@’host_name’。
password,賬戶的口令。類似於 CREATE USER 中的 IDENTIED BY。
確定賬戶的許可權

可以授予使用者的許可權由很多種。下面3張表即為許可權的彙總。

資料庫管理許可權

許可權名 許可權所允許的操作
CREATE USER 使用高階賬戶管理語句
FILE 讀、寫 MariaDB 伺服器主機上的檔案
GRANT OPTION 把賬戶許可權授予其他賬戶
PROCESS 檢視在執行的執行緒的資訊
RELOAD 重新載入許可權資料或更新日誌及快取
REPLICATION CLIENT 查詢主/從伺服器的執行地點
REPLICATION SLAVE 以複製的從伺服器執行
SHOW DATBASES 用 SHOW DATABASES 語句檢視全部資料庫名稱
SHUTDOWN 關閉伺服器
SUPER 用 KILL 命令終止執行緒以及進行其他超級使用者操作
 

資料庫物件操作許可權

ALTER 更改資料表或索引的定義
ALTER ROUTINE 更改或刪除儲存函式或儲存過程
CREATE 建立資料庫或資料表
CRATE ROUTINE 建立儲存函式或儲存過程
CREATE TEMPORARY TABLE 用 TEMPORARY 關鍵字建立臨時表
CREATE VIEW 建立檢視
DELETE 刪除資料庫中現有的資料行
DROP 刪除資料庫、資料表或其他物件
EVENT 為時間排程程式建立、刪除或修改各種事件
EXECUTE 執行儲存函式或儲存過程
INDEX 建立或刪除索引
INSERT 往資料表中插入新資料行
LOCK TABLE 用 LOCK TABLE 語句明確地鎖定資料表
REFERENCE 未使用(保留字)
SELECT 檢索資料表裡的資料行
SHOW VIEW 檢視檢視的定義
TRGGER 建立或刪除觸發器
UPDATE 修改資料行
 

其他許可權

ALL [PRIVILEGES] 所有操作許可權(但不包含 GRANT)
USAGE 一個特殊的“無許可權”許可權
資料庫管理許可權控制著伺服器的執行情況,所以很少授權與普通使用者。資料庫物件操作許可權控制著對伺服器資料訪問。

授予使用者許可權

要想把許可權授予其他使用者,首先發出授權的使用者必須具備該許可權,而且必須具備 GRANT OPTION 許可權。

MariaDB 允許在資料庫系統全域性、資料庫、資料表、資料列等多種級別上進行授權。許可權級別由 ON 子句控制。

執行下面的語句:

MariaDB [(none)]> GRANT ALL ON test.* TO 'angel'@'localhost' WITH GRANT OPTION;
上面語句將資料庫test及其裡面所有物件的所有許可權授權於賬戶 ‘yangfan’@’localhost’。

MariaDB [(none)]> SHOW GRANTS FOR 'yangfan'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for angel @localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'angel'@'localhost' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT ALL PRIVILEGES ON `test`.* TO 'angel'@'localhost' WITH GRANT OPTION                                    |
+----------------------------------------------------------------------------------------------------------------+
執行以下語句:

MariaDB [(none)]> GRANT SELECT,INSERt,UPDATE ON test.* TO 'angel'@'127.0.0.1';
上面語句將賬戶 ‘yangfan’@’127.0.0.1’ 的許可權更改為,只有對資料庫 test 及其裡面所有物件進行 SELECT、INSERT 和 UPDATE 操作的許可權。

MariaDB [(none)]> SHOW GRANTS FOR 'yangfan'@'127.0.0.1';
+----------------------------------------------------------------------------------------------------------------+
| Grants for angel@127.0.0.1                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'yangfan'@'127.0.0.1' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'angel'@'127.0.0.1'                                              |
+----------------------------------------------------------------------------------------------------------------+
 撤銷使用者許可權

撤銷使用者授權用 REVOKE 語句,下面是 REVOKE 語句的語法:

REVOKE preivileges [ columns ] ON what FROM account;
之前我們將全部許可權授予賬戶 ‘yangfan’@’localhost’, 現在我們對該賬戶進行許可權的刪除:

MariaDB [(none)]> REVOKE ALL ON test.* FROM 'yangfan'@'localhost';
這樣賬戶 ‘yangfan’@’localhost’ 對資料庫 test 的許可權便被全部刪除了。

MariaDB [(none)]> SHOW GRANTS FOR 'yangfan'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for angel@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'angel'@'localhost' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT USAGE ON `test`.* TO 'angel'@'localhost' WITH GRANT OPTION                                             |
+----------------------------------------------------------------------------------------------------------------+
注意:USAGE 便是上文提到的“無許可權”的許可權。

我們再刪除賬戶 ‘yangfan’@’127.0.0.1’ 的 INSERT 和 UPDATE 的許可權:

MariaDB [(none)]> REVOKE INSERT, UPDATE ON test.* FROM 'yangfan'@'127.0.0.1';
檢視結果:

MariaDB [(none)]> SHOW GRANTS FOR 'yangfan'@'127.0.0.1';
+----------------------------------------------------------------------------------------------------------------+
| Grants for angel@127.0.0.1                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'angel'@'127.0.0.1' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT SELECT ON `test`.* TO 'angel'@'127.0.0.1'                                                              |
+----------------------------------------------------------------------------------------------------------------+


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9522838/viewspace-2284973/,如需轉載,請註明出處,否則將追究法律責任。

相關文章