合理的管理DB用戶權限是一個DBA的基本工作,這里整理一下MySQL用戶管理的相關內容。
CREATE USER、DROP USER、RENAME USER
用來創建、刪除、修改MySQL用戶
GRANT
為給定MySQL用戶分配權限
REVOKE 撤銷已給定MySQL用戶的相關權限
SET PASSWORD 為MySQL用戶配置密碼
SHOW GRANTS 顯示給定MySQL用戶的權限
相關用戶及權限的信息都會記錄在MySQL數據庫中的權限表中,如下:
user 可連接到數據庫的用戶及其全局權限
db 數據庫級權限
table_priv 數據表級權限
columns_priv 數據列級權限
procs_priv 與存儲例成相關的權限
MySQL用戶管理
創建MySQL用戶(擁有創建MySQL 用戶權限的用戶才可以創建,下面例子以root用戶為測試用戶)
mysql> create user kevin@'%' identified by 'oracle';
Query OK, 0 rows affected (0.00 sec)mysql> select user, host, password from mysql.user where user='kevin';
+-------+------+-------------------------------------------+| user | host | password |
+-------+------+-------------------------------------------+| kevin | % | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+-------+------+-------------------------------------------+1 row in set (0.00 sec)
kevin@’%’ 用戶名+主機名
% 字符通配符,表示任意字符
MySQL通過配置主機名來限制通過索要創建的MySQL用戶登錄的主機,%表示任意主機都可以登入。
kevin@10.8.1.% 表示10.8.1段的主機可以登入
kevin@’Oracle.com.cn’ 表示主機名為oracle.com.cn的主機可以通過kevin用戶登入。
對MySQL賬戶授權
syntax:
GRANT privileges (columns)
on what
TO account
[identified by ‘password’]
[REQUIRE encryption requirements]
[WITH grant or resource management options]
如果grant語句中賬戶不存在則先創建相應賬戶,再把給定權限分配給它。
privilege 授予賬戶的權限。
what 權限的級別。 最高級別是全局,給定的權限用于所有的數據庫和所有的數據表。同時,權限還可以設置為數據庫、表、列及存儲過程級別。
account 被授予權限的賬號。
password 修改賬戶的口令
columns 權限作用列
REQUIRE和WITH子句是可選的,require子句用于使用SSL進行安全連接。WITH子句用來授予GRANT OPTION權限(允許把賬戶自己的權限授予別人)。
賬戶權限整理
數據庫管理權限
CREATE USER FILE(READ OR WRITE MYSQL SERVER’S FILES) GRANT OPTION RELOAD PROCESS REPLICATION CLIENT REPLICATION SLAVE SHUTDOWN SUPER(kill command to shutdown processes or other super user operation)
數據庫對象權限
ALTER/ALTER ROUTINE/CREATE/CREATE ROUTINE/CREATE TEMPORARY TABLES/CREATE VIEWS/DELETE/DRPOP/EVENT/EXECUTE/INDEX/INSERT/LOCK TABLES/REFERENCE/SELECT/SHOW VIEW/TRIGGER/UPDATE
其它權限
ALL ALL operations inluding GRANT privilege
USAGE a special privilege and means NULL privilege
用戶在授權時必須擁有相應的權限及GRANT OPTION權限。同時,MySQL權限范圍包括數據庫系統全局,數據庫,數據表,數據列等多種范圍,付權時通過ON子句控制賦予權限的范圍,如下:
ON . 全局權限
ON * 如果沒有指定數據庫(use db),則是全局權限,否則是是定數據庫默認對象的權限。
ON db_name.* 數據庫級別權限
ON db_name.tbl_name 數據庫表級權限
ON tbl_name 數據表級權限
ON db_name。routie_name 存儲例程權限
查看用戶擁有的權限。
mysql> show grants for system;
+----------------------------------------------------------------------------------------------------------------+| Grants for system@% |
+----------------------------------------------------------------------------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO 'system'@'%' IDENTIFIED BY PASSWORD '*58319282EAB9E38D49CA25844B73DA62C80C2ABC' |
+----------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)12345671234567
撤銷權限和刪除用戶
REVOKE privileges [columns] ON what FROM account;
修改用戶的口令
SET PASSWORD FOR system@’%’ = PASSWORD(‘PASSWD’)
當然,增加、修改用戶的權限也可以直接insert、update mysql.user表,這些操作就需要感性卻的初學者試一下了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。