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 |
---|---|
|
所有權限 |
|
|
|
可以 |
|
可以創建數據庫和表 |
|
可以使用create routine |
|
可以使用臨時表 |
|
可以對用戶進添加,刪除,重命名,撤銷權限 |
|
可以創建和修改視圖 |
|
|
|
可能刪除數據庫,表,視圖等 |
|
可以使用事件高度器 |
|
可以執行routine |
|
可以在服務器讀寫文件 |
|
用戶有權對自己添加的用衣授權 |
|
可以創建,刪除索引 |
|
可以插入 |
|
可以鎖定表 |
|
可以使用 |
|
Not implemented |
|
可以使用刷新功能 |
|
用戶可以進行主從同步 |
|
主從同步時,從服務器可以從主服務器讀取binary log |
|
|
|
可以使用show databases來查看所有數據庫 |
|
|
|
可以使用mysqladmin中的參數shutdown |
|
Enable use of other adminstrative operations such as |
|
可以使用觸發器 |
|
可以進行理會新操作 |
|
無特權 |
實例:
復制代碼代碼如下:
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這個用戶的所有權限
作者:海底蒼鷹