mysql安裝後好,會有一個名字為mysql的資料庫,存放使用者的表是user,mysql資料庫的使用者管理就是圍繞這個表展開的,當然還有一些表,例如:tables_priv,procs_priv,clumns_priv,information_schema資料庫裡面的USER_PRIVILEGES等。
如果有mysql管理工具phpmyadmin的話,我們可以通過圖形畫介面來對使用者進行管理,但是如果沒有phpmyadmin這樣的管理工具怎麼辦呢?這個時候,我們可以通過命令列執行sql語句來管理mysql的使用者。
一,添加使用者
1,create user
文法:
CREATE USER user_specification
[, user_specification] ...
user_specification:
user [IDENTIFIED BY [PASSWORD] 'password']
執行個體: 複製代碼 代碼如下:mysql> create user '44'@'127.0.0.1'; //建立一個44使用者
Query OK, 0 rows affected (0.00 sec)
mysql> create user '33'@'localhost' identified by 'aaaa'; //建立一個33使用者,密碼為aaaa
Query OK, 0 rows affected (0.00 sec)
mysql> select * from mysql.user where user='33' or user='44'\G; //查看一下mysql下的user
create user 雖然可以建立使用者,但是它只是建立使用者,並沒有給使用者指派置許可權,所以一般被 grant命令所取代。
2,grant
文法:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
user_specification:
user [IDENTIFIED BY [PASSWORD] 'password']
ssl_option:
SSL
| X509 #要求x509認證
| CIPHER 'cipher' #密碼編譯演算法
| ISSUER 'issuer' #認證發行商
| SUBJECT 'subject' #主題
with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count #每小時最多執行多少條sql
| MAX_UPDATES_PER_HOUR count #每小時最多更新多少條資料
| MAX_CONNECTIONS_PER_HOUR count #每小時最大的聯結數是多少
| MAX_USER_CONNECTIONS count #最大使用者聯結數
不要被上面的文法嚇倒,其實理解什麼意思,就很容易掌握。我是這樣理解的。
grant 許可權 on 應用範圍(資料庫表,方法等) to 使用者(用@隔開,前面是使用者名稱後面是主機名稱'使用者名稱'@'主機名稱') identified by 密碼 require 要求什麼的 with 對使用者的進行的執行sql的條數控制。
個人覺得,只要記得上面幾個紅色的關鍵詞,基本上這個命令就掌握了。
Privilege |
Meaning |
ALL [PRIVILEGES] |
所有許可權 |
ALTER |
可以使用alter table |
ALTER ROUTINE |
可以使用alter routine |
CREATE |
可以建立資料庫和表 |
CREATE ROUTINE |
可以使用create routine |
CREATE TEMPORARY TABLES |
可以使用暫存資料表 |
CREATE USER |
可以對使用者進添加,刪除,重新命名,撤銷許可權 |
CREATE VIEW |
可以建立和修改視圖 |
DELETE |
可以刪除資料 |
DROP |
可能刪除資料庫,表,視圖等 |
EVENT |
可以使用事件高度器 |
EXECUTE |
可以執行routine |
FILE |
可以在伺服器讀寫檔案 |
GRANT OPTION |
使用者有權對自己添加的用衣授權 |
INDEX |
可以建立,刪除索引 |
INSERT |
可以插入 |
LOCK TABLES |
可以鎖定表 |
PROCESS |
可以使用SHOW PROCESSLIST來查看mysql目前使用者的執行sql情況 |
REFERENCES |
Not implemented |
RELOAD |
可以使用重新整理功能 |
REPLICATION CLIENT |
使用者可以進行主從同步 |
REPLICATION SLAVE |
主從同步時,從伺服器可以從主伺服器讀取binary log |
SELECT |
可以尋找 |
SHOW DATABASES |
可以使用show databases來查看所有資料庫 |
SHOW VIEW |
可以使用show view來查看視圖 |
SHUTDOWN |
可以使用mysqladmin中的參數shutdown |
SUPER |
Enable use of other adminstrative operations such as CHANGE MASTER TO , KILL , PURGE BINARY LOGS , SET GLOBAL , and mysqladmin debug command |
TRIGGER |
可以使用觸發器 |
UPDATE |
可以進行理會新操作 |
USAGE |
無特權 |
執行個體: 複製代碼 代碼如下:grant all ON test.* TO 'test'@'localhost'; //test使用者擁有test資料庫下的所有操作
grant select,update on test.user to 'test'@'localhost'; //test使用者可以對test資料庫下user表,進行尋找和更新操作
//test使用者的的密碼是111111,對user表中的name欄位有讀取許可權,對id,name有更新許可權
grant select(name),update(id,name) on test.user to 'test'@'localhost' identified by '111111';
//test使用者對所有資料庫擁有所有權力,並且要求ssl加密
grant all privileges on *.* to 'test'@'%' identified by '123456' require ssl
當添加完使用者後,別忘 了 flush privileges;
二,刪除使用者
文法:
DROP USER user [, user] ...
執行個體: 複製代碼 代碼如下:drop user 'test2'@'localhost'; //當用drop刪除使用者進,tables_priv,procs_priv等表中的資料也會被刪除
在這裡為什麼要用'test2'@'localhost'當使用者名稱,而不是直接test2呢,因為mysql.user這張表,是根使用者名和host名決定一個使用者,你可查看一下表結構就知道了。
show create table mysql.user\G;你會發現有這個東西PRIMARY KEY (`Host`,`User`),表示聯合主鍵
三,修改使用者
文法:
RENAME USER old_user TO new_user
[, old_user TO new_user] ...
執行個體: 複製代碼 代碼如下:rename user 'test2'@'localhost' to 'test'@'%';
四,修改許可權
文法:
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
grant就給使用者指派許可權,revoke是把許可權從使用者的身上拿走。
執行個體: 複製代碼 代碼如下:mysql> revoke update on *.* from 'tank'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> select mysql.user.update_priv from mysql.user where user='tank' and host='localhost';
+-------------+
| update_priv |
+-------------+
+-------------+
1 row in set (0.00 sec)
去掉tank@localhost這個使用者的更新功能,這個是去掉一個許可權,如果我要全部去掉怎麼辦呢,一個一個寫太麻煩了,看下面的一個例子 複製代碼 代碼如下:mysql> revoke all privileges ,grant option from '33'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
用掉33@localhost這個使用者的所有許可權
作者:海底蒼鷹