一、創建用戶
CREATE USER li@localhost IDENTIFIED BY 'li';
授予用戶li數據庫person的所有權限,並允許用戶li將數據庫person的所有權限授予其它用戶
GRANT ALL ON PERSON.* TO li@localhost WITH GRANT OPTION;
立即生效,如果授予的權限沒有生效執行以下命令,在5.6版本更改即會生效。
FLUSH PRIVILEGES;
GRANT創建用戶
如果當前不存在用戶,GRANT可以在授予權限的時候創建用戶
授予用戶數據庫person所有表的select,insert權限。
GRANT SELECT,INSERT ON PERSON.* TO 'abc'@'localhost' identified by 'abc';
同時運行用戶abc將person數據庫的SELECT,INSERT權限授予給其它用戶
GRANT SELECT,INSERT ON PERSON.* TO 'abc'@'localhost' identified by 'abc' with grant option;
創建用戶root密碼123456並賦予服務器所有權限,允許IP192.168.1.5的客戶端連接。 grant all privileges on *.* to root@'192.168.1.5' identified by '123456'
退出當前用戶
exit
查看當前用戶的權限
show grants;
查看用戶abc的權限
show grants for abc@localhost;
二、REVOKE回收權限
回收用戶abc數據庫person的insert的權限
REVOKE INSERT ON PERSON.* FROM abc@localhost;
回收權限
回收person數據庫abc的所有權限 REVOKE ALL ON PERSON.* FROM abc@localhost; 回收abc的所有數據庫所有權限 REVOKE ALL ON *.* FROM abc@localhost;
三、刪除、修改用戶
在早期版本需要回收用戶的權限之后才能刪除用戶。刪除用戶建議使用這種辦法,有的人會使用delete from user的辦法刪除,但是有的用戶是針對db的權限那么在mysql.db里面也存在記錄,而使用drop user的方式都會被刪除。
DROP USER abc@localhost;
修改用戶
RENAME USER 'test'@'127.0.0.1' TO 'test'@'%'
四、修改用戶密碼
use mysql; UPDATE user SET password=PASSWORD('輸入新密碼') WHERE user='用戶名'; FLUSH PRIVILEGES;
五、相關權限授予
1.創建root用戶
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
2.創建一個服務器基本的增刪改查用戶
GRANT UPDATE, DELETE, INSERT, SELECT ON *.* TO 'test'@'%' identified by 'test' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0
3.創建數據庫基本的增刪改查用戶
GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `new`.* TO 'test'@'%' identified by 'test';
4.授予數據庫名以db開頭的數據庫的權限
GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `db%`.* TO 'perform'@'%'
5.創建備份用戶權限
GRANT SELECT,EVENT,SHOW DATABASES,LOCK TABLES,SUPER,REPLICATION CLIENT,RELOAD ON *.* TO 'backup'@'localhost' identified by 'backup'
6.備份恢復用戶權限
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON *.* TO 'restore'@'localhost' identified by '123456'
7.復制用戶權限
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY '123456';
六、權限表字段詳解
基於mysql5.6
user表
user表的權限是基於服務器范圍的所有權限,比如用戶擁有服務器中所有數據庫的select權限那么在user表中的Select_priv列為Y,如果用戶單單只擁有某個一數據庫的select權限那么user表中的Select_priv為N,會在DB表中記錄一條信息在DB表中的select_priv為Y。
desc mysql.user;
filed type null key default
Host | char(60) | NO | PRI | 主機名,localhost表示本地登入,%表示不受限制,也可以單獨賦予某個IP的訪問權限。 | |
User | char(16) | NO | PRI | 登入用戶名 | |
Password | char(41) | NO | 登入用戶密碼 | ||
Select_priv | enum('N','Y') | NO | N | select權限 | |
Insert_priv | enum('N','Y') | NO | N | insert權限 | |
Update_priv | enum('N','Y') | NO | N | update權限 | |
Delete_priv | enum('N','Y') | NO | N | delete權限 | |
Create_priv | enum('N','Y') | NO | N | create權限 | |
Drop_priv | enum('N','Y') | NO | N | drop權限 | |
Reload_priv | enum('N','Y') | NO | N | 執行刷新和重新加載MySQL各種內部緩存命令的權限 | |
Shutdown_priv | enum('N','Y') | NO | N | 關閉mysql服務器的權限,不能授予root外的其它用戶 | |
Process_priv | enum('N','Y') | NO | N | 執行show processlist命令的權限 | |
File_priv | enum('N','Y') | NO | N | 執行SELECT INTO OUTFILE和LOAD DATA INFILE命令 | |
Grant_priv | enum('N','Y') | NO | N | 是否可以將權限授予其它用戶 | |
References_priv | enum('N','Y') | NO | N | 參照表的權限 | |
Index_priv | enum('N','Y') | NO | N | 創建刪除索引的權限 | |
Alter_priv | enum('N','Y') | NO | N | ALTER權限 | |
Show_db_priv | enum('N','Y') | NO | N | 查看有哪些數據庫的權限 | |
Super_priv | enum('N','Y') | NO | N | Super權限,包括kill權限。 | |
Create_tmp_table_priv | enum('N','Y') | NO | N | 創建創建臨時表權限 | |
Lock_tables_priv | enum('N','Y') | NO | N | 執行lock table權限 | |
Execute_priv | enum('N','Y') | NO | N | 執行存儲過程權限 | |
Repl_slave_priv | enum('N','Y') | NO | N | 復制相關的權限 | |
Repl_client_priv | enum('N','Y') | NO | N | 復制相關的權限 | |
Create_view_priv | enum('N','Y') | NO | N | 創建視圖的權限 | |
Show_view_priv | enum('N','Y') | NO | N | 查看視圖的權限 | |
Create_routine_priv | enum('N','Y') | NO | N | 創建函數、存儲過程等權限 | |
Alter_routine_priv | enum('N','Y') | NO | N | 修改刪除函數、存儲過程等權限 | |
Create_user_priv | enum('N','Y') | NO | N | 創建用戶的權限 | |
Event_priv | enum('N','Y') | NO | N | 創建、修改和刪除事件的權限 | |
Trigger_priv | enum('N','Y') | NO | N | 創建、修改和刪除觸發器的權限 | |
Create_tablespace_priv | enum('N','Y') | NO | N | 創建表空間的權限 | |
ssl_type | enum('','ANY','X509','SPECIFIED') | NO | |||
ssl_cipher | blob | NO | |||
x509_issuer | blob | NO | |||
x509_subject | blob | NO | |||
max_questions | int(11) unsigned | NO | 0 | 最多問題數 | |
max_updates | int(11) unsigned | NO | 0 | 允許的最大更新 | |
max_connections | int(11) unsigned | NO | 0 | 允許的最大連接 | |
max_user_connections | int(11) unsigned | NO | 0 | ||
plugin | char(64) | YES | |||
authentication_string | text | YES | |||
password_expired | enum('N','Y') | NO | N |
db表
如果授予一個用戶單獨某個數據庫的權限,就會在db表中記錄一條相關信息。
desc mysql.db;
filed type null key default
Host | char(60) | NO | PRI | 主機名,localhost代表只能本地登入,如果是%表示不受限制,也可以單獨賦予某個IP的訪問權限。 | |
Db | char(64) | NO | PRI | 數據庫名 | |
User | char(16) | NO | PRI | 用戶名 | |
Select_priv | enum('N','Y') | NO | N | select權限 | |
Insert_priv | enum('N','Y') | NO | N | insert權限 | |
Update_priv | enum('N','Y') | NO | N | update權限 | |
Delete_priv | enum('N','Y') | NO | N | delete權限 | |
Create_priv | enum('N','Y') | NO | N | create權限 | |
Drop_priv | enum('N','Y') | NO | N | drop權限 | |
Grant_priv | enum('N','Y') | NO | N | 是否可以將權限授予其它用戶 | |
References_priv | enum('N','Y') | NO | N | ||
Index_priv | enum('N','Y') | NO | N | 創建刪除索引的權限 | |
Alter_priv | enum('N','Y') | NO | N | ALTER權限 | |
Create_tmp_table_priv | enum('N','Y') | NO | N | 創建臨時表的權限 | |
Lock_tables_priv | enum('N','Y') | NO | N | 執行lock table權限 | |
Create_view_priv | enum('N','Y') | NO | N | 創建視圖的權限 | |
Show_view_priv | enum('N','Y') | NO | N | 查看視圖的權限 | |
Create_routine_priv | enum('N','Y') | NO | N | 創建函數、存儲過程的權限 | |
Alter_routine_priv | enum('N','Y') | NO | N | 修改刪除函數、存儲過程的權限 | |
Execute_priv | enum('N','Y') | NO | N | 執行存儲過程的權限 | |
Event_priv | enum('N','Y') | NO | N | 創建、修改、刪除事件的權限 | |
Trigger_priv | enum('N','Y') | NO | N | 創建、修改、刪除觸發器的權限 |
總結
使用revoke all privileges並不能收回用戶的所有權限,對於用戶的單個數據庫的權限需要單獨回收,具體可以查詢mysql.db數據庫查看用戶的每個數據庫的具體權限,如果用戶權限太多最快的回收權限的方法是刪除該用戶再重新授予用戶新的權限
注意:給一個數據庫授予一個用戶不同連接方式的權限,mysql使用低權限的原則。
備注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。 《歡迎交流討論》 |