管理 MariaDB 用戶賬戶


哪些用戶可以連接到MariaDB 服務器,他們都可以從哪些地方連接,連接到服務器后又能夠做什么等,都是本文將涉及到的內容。

用戶的權限信息都保存在 mysql 庫中的幾個權限表中。對 MariaDB 的賬號管理主要通過下面的SQL 語句來完成。

  • CREATE USER,DROP USER 和 RENAME USER。三條語句分別用來創建、刪除和重命名 MariaDB 賬戶。
  • GRANT。為指定 MariaDB 賬戶分配權限。
  • REVOKE。撤銷指定 MariaDB 賬戶的權限。
  • SET PASSWORD。為給定MariaDB 賬戶設置口令。
  • SHOW GRANT。顯示指定 MariaDB賬戶當前擁有的全部權限。

 Mariadb 的賬戶管理操作

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

     

     MariaDB [(none)]> CREATE USER yangfan IDENTIFIED BY 'yangfan';
  • DROP USER:刪除一個帳戶及與之相關的全部權限:
    DROP USER account;
    該語句並未刪除指定用戶可訪問到的任何數據庫及相關的數據對象。
    示例:

     

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

     

     MariaDB [(none)]> RENAME USER 'yangfan.lalala'@'127.0.0.1' TO 'yangfan.lalala'@'%';

CREATE USER 等賬戶管理語句中的賬戶由一個用戶名和一個主機名組成,其格式為‘user_name’@’host_name’。

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

MariaDB [(none)]> CREATE USER 'yangfan'@'localhost' IDENTIFIED BY 'yangfan';
MariaDB [(none)]> CREATE USER 'yangfan'@'169.254.195.91' IDENTIFIED BY 'yangfan';

第一條語句,創建一個名為 yangfan 的用戶,並限制其只可從本機進行連接操作;第二條一句,創建一個名為 yangfan 的用戶,並限制其只可從 ip 169.254.195.91 的客戶機上連接服務。雖然用戶名相同,實際上,他們並不是同一個賬戶,其對應的權限也可能不盡相同。

當然很多情況下並不需要嚴格要求用戶只能從一台主機連接服務器。這個時候就可以用上通配符:

MariaDB [(none)]> CREATE USER 'yangfan'@'169.254.195.%' IDENTIFIED BY 'yangfan';
MariaDB [(none)]> CREATE USER 'yangfan'@'%.yangfanweb.cn' IDENTIFIED BY 'yangfan';
MariaDB [(none)]> CREATE USER 'yangfan'@'%' IDENTIFIED BY 'yangfan';

SQL 中 LIKE 的通配符 % 及 -,在此都可使用。如若使用 “%” 或 “-” 本身,則需使用 “\” 對其轉義。

上面第一條語句創建一個名為 yangfan 的用戶,並允許其在 169.254.195.* ip 段下的所有主機連接服務器;第二條語句創建一個名為 yangfan 的用戶,並允許其能夠從 yangfanweb.cn 域中的任意一台主機連接服務器;第三條語句創建了一個名為 yangfan 的用戶,並允許其可從任意一台主機來連接服務器。(第三種方式最為方便,但對系統最不安全。)

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 'yangfan'@'localhost' WITH GRANT OPTION;

上面語句將數據庫test及其里面所有對象的所有權限授權於賬戶 ‘yangfan’@’localhost’。

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

執行以下語句:

MariaDB [(none)]> GRANT SELECT,INSERt,UPDATE ON test.* TO 'yangfan'@'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 yangfan@127.0.0.1                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'yangfan'@'127.0.0.1' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'yangfan'@'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 yangfan@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'yangfan'@'localhost' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT USAGE ON `test`.* TO 'yangfan'@'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 yangfan@127.0.0.1                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'yangfan'@'127.0.0.1' IDENTIFIED BY PASSWORD '*F6131BD316F9043F5FE0E5B95F5713D6F86A157F' |
| GRANT SELECT ON `test`.* TO 'yangfan'@'127.0.0.1'                                                              |
+----------------------------------------------------------------------------------------------------------------+

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM