管理MySQL用戶帳戶mysql
MySQL服務器的權限所有存放在mysql庫中的幾個權限表。(以下表)sql
權限表數據庫 |
權限表的內容緩存 |
user服務器 |
可鏈接到服務器的用戶和他們的全局權限ide |
db函數 |
數據庫級權限ui |
tables_privspa |
數據表級權限線程 |
column_priv |
數據列級權限 |
procs_priv |
與存儲例程有關的權限 |
對於mysql數據庫的操做注意經過下面這些帳戶管理SQL語句完成:
create user ; drop user ; rename user;
grant;
revoke;
set password;
show grants;
若是grant的權限給定了庫、表、列。那麼它們將被分別記錄到db、tables_priv、column_priv權限表裏。revoke也是從相關表裏將記錄刪除掉。
注:若是MySQL版本升級到一個新的版本,要運行mysql_update命令把那些權限表也升級到新版本的結構。
一、高級mysql用戶管理
1)建立用戶
create user 'user'@'hostname' identified by 'passwd';
通配符:
「%」字符是一個通配符,主機名若是設置爲「%」,就表示「任意一臺主機」。
「-」也能夠用在主機名部分裏,能夠匹配任意單個字符。
例:若是讓用戶從a.com域中的任意一臺主機去鏈接服務器,須要把主機名設置「%.a.com」
create user 'username'@'%.a.com' identified by 'passwd';
若是讓用戶從網段中訪問,也可使用網段或者「192.168.1.%」
create user 'username'@'192.168.1.0/255.255.255.0' identified by 'passwd';
create user 'username'@'192.168.1.%' identified by 'passwd';
2)刪除用戶
drop user 'username'@'hostname';
3)重命名用戶
rename user 'username'@'hostname' to 'username'@'hostname';
二、對帳戶受權
grant privileges (column) on dbname.tablename to 'username'@'hostname' identified by 'passwd' [REQUIRE] [WITH]
1)肯定帳戶的權限
能夠授予用戶的權限分爲不少種,咱們把這些權限按照管理類別分表。
數據庫管理權限表
權限名 |
該權限所容許的操做 |
Create user |
建立用戶 |
File |
讀、寫MySQL服務器主機上的文件 |
Grant Option |
受權 |
Process |
查看服務器運行的線程 |
Reload |
從新加載權限數據表或者更新日誌及緩存 |
Replication client |
查詢主/從服務器的運行地點 |
Replication slave |
以複製的從服務器運行 |
Show database |
用show database 語句查看全體數據庫的名字 |
Shutdown |
關閉服務器 |
Super |
用kill命令終止線程以及進行其餘超級用戶操做 |
數據庫對象操做權限
權限名 |
該權限所容許的操做 |
Alter |
更改數據表和索引的定義 |
Alter routine |
更改或者刪除存儲函數和存儲過程 |
Create |
建立數據庫和數據表 |
Create routine |
建立存儲函數和存儲過程 |
Create temporary tables |
用temporary關鍵字建立臨時數據表 |
Create view |
建立視圖 |
Delete |
刪除數據表裏的現有數據行 |
Drop |
刪除數據庫、數據表和其餘對象 |
Event |
爲事件調度程序建立、刪除或修改各類事件 |
Execute |
執行存儲函數和存儲過程 |
Index |
建立或刪除索引 |
Insert |
插入數據 |
Lock tables |
用lock tables 語句明確鎖定數據表 |
Select |
查詢 |
Show view |
用show create view 語句查看視圖的定義 |
Trigger |
建立或者刪除觸發器 |
Update |
修改數據行 |
其餘權限
權限名 |
該權限所容許的操做 |
All |
全部操做(不包括grant) |
Usage |
一個特殊的「無權限」權限 |
權限級別限定符
權限限定符 |
有關權限的做用範圍 |
ON *.* |
全局級 |
ON dbname.* |
數據庫級 |
ON dbname.tablename |
數據表級 |
ON tablename |
數據表級 |
ON dbname.routine_name |
存儲例程權限 |
2)使用「無權限」的USAGE權限
USAGE的用法是:授予全局級USAGE權限,指定帳戶名,給出該帳戶與權限無關的特性值。
好比:若是你想在不影響帳戶權限的前提下改變該帳戶的口令,或要求用戶必須使用SSL鏈接,或者想對該帳戶限制鏈接,可使用下面幾條語句:
grant usage on *.* to account identified by 'passwd';
grant usage on *.* to account require SSL;
grant usage on *.* to account with max_connections_per_hour 10;
三、查看帳戶的權限
show grants for 'username'@'hostname'
四、撤銷權限和刪除用戶
revoke privileges on dbname.tablename from 'username'@'hostname';
drop user 'username'@'hostname'
五、改變口令
set password for 'username'@'hostname' = PASSWORD ('passwd')