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' |
+----------------------------------------------------------------------------------------------------------------+
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。