MySQL用戶帳號管理主要用grant(授權)和revoke(撤權)兩個SQL指令來管理。這兩個指令實質是通過操作user(連接權限和全局權限)、db(數據庫級權限)、tables_priv(數據表級權限)、columns_priv(數據列級權限)四個權限表來分配權限的。host權限表不受這兩個指令影響。下面將會詳細介紹用戶權限管理的內容。
本文由網頁教學網(http://www.webjx.com)整理發布!轉載請注明出處,謝謝!
GRANT語法說明:
GRANT privileges (columns) #privileges表示授予的權限,columns表示作用的列(可選) ON what #設置權限級別,全局級、數據庫級、數據表級和數據列級 TO account #權限授予的用戶,用"user_name"@"host_name"這種用戶名、主機名格式 IDENTIFIED BY 'password' #設置用戶帳號密碼 REQUIRE encryption requirements #設置經由SSL連接帳號 WITH grant or resource management options; #設置帳號的管理和資源(連接服務器次數或查詢次數等)選項
示例:
mysql>grant all on db.* to 'test'@'localhost' identified by 'test'; 上例運行後的效果是,test用戶只能通過‘test’密碼從本機訪問db數據庫 mysql>grant all on db.* to 'test'@'%' identified by 'test'; 上例運行後的效果是,test用戶可通過‘test’密碼從任意計算機上訪問db數據庫。‘%’代表任意字符,‘_’代表一個任意字符。主機名部份還可以是IP地址。
Table 4.1. 訪問權限表
Table 4.2. 權限作用范圍(由ON子句設置)
USAGE權限的用法:修改與權限無關的帳戶項,如:
mysql>GRANT USAGE ON *.* TO account IDENTIFIED BY 'new_password'; #修改密碼 mysql>GRANT USAGE ON *.* TO account REQUIRE SSL; #啟用SSL連接 mysql>GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 10; #設置資源
擁有WITH GRANT OPTION權限的用戶可把自已所擁用的權限轉授給其他用戶,如:
mysql>GRANT ALL ON db.* TO 'test'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; 這樣test用戶就有權把該權限授予其他用戶。
限制資源使用,如:
mysql>GRANT ALL ON db.* TO account IDENTIFIED BY 'password' WITH MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 200 MAX_UPDATES_PER_HOUR 50; 允許account用戶每小時最多連接20次服務器,每小時最多發出200條查詢命令(其中更新命令最多為50條)
默認都是零值,即沒有限制。FLUSH USER_RESOURCES和FLUSH PRIVILEGES可對資源限制計數器清零。
REVOKE語法說明:
mysql>REVOKE privileges (columns) ON what FROM account;
示例:
mysql>REVOKE SELECT ON db.* FROM 'test'@'localhost'; 刪除test帳號從本機查詢db數據庫的權限
REVOKE可刪除權限,但不能刪除帳號,即使帳號已沒有任何權限。所以user數據表裡還會有該帳號的記錄,要徹底刪除帳號,需用DELETE命令刪除user數據表的記錄,如:
% mysql -u root -p mysql>use mysql mysql>DELETE FROM user where User='test' and Host='localhost'; mysql fulsh privileges;
REVOKE不能刪除REQUIRE和資源占用的配置。他們是要用GRANT來刪除的,如:
GRANT USAGE ON *.* TO account REQUIRE NONE; #刪除account帳號的SSL連接選項 GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 0 MAX_QUERIES_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; #刪除account帳號的資源限制