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地址。
如果沒有給定主機部份,則默認為任意主機,也就是'test'和'test'@'%'是等價的。
Table 4.1. 訪問權限表
權限 權限說明
CREATE TEMPORARY TABLES 創建臨時數據表
EXECUTE 執行存儲過程(暫不支持)
FILE 操作系統文件
GRANT OPTION 可把本帳號的權限授予其它用戶
LOCK TABLES 鎖定指定數據表
PROCESS 查看運行著的線程信息
RELOAD 重新加載權限表或刷新日志及緩沖區
REPLICATION CLIENT 可查詢主/從服務器主機名
REPLICATION SLAVE 運行一個鏡像從服務器
SHOW DATABASES 可運行SHOW DATABASES指令
SHUTDOWN 關閉數據庫服務器
SUPER 可用kill終止線程以及進行超級用戶操作
ALTER 可修改表和索引的結構
CREATE 創建數據庫和數據表
DELETE 刪除數據表中的數據行
DROP 刪除數據表和數據行
INDEX 建立或刪除索引
INSERT 插入數據行
REFERENCES (暫時不支持)
SELECT 查詢數據行
UPDATE 更新數據行
ALL 所有權限,但不包括GRANT。
USAGE 無權限權限
Table 4.2. 權限作用范圍(由ON子句設置)
權限限定符 作用范圍
ON *.* 全局級權限,作用於所有數據庫
ON * 全局級權限,若未指定默認數據庫,其作用范圍是所有數據庫,否則,其作用范圍是當前數據庫
ON db_name.* 數據庫級權限,作用於指定數據庫裡的所有數據表
ON db_name.tbl_name 數據表級權限,作用於數據表裡的所有數據列
ON tbl_name 數據表級權限,作用於默認數據庫中指定的數據表裡的所有數據列
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帳號的資源限制