一、建立使用者
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;
四、修改使用者密碼
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 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。 《歡迎交流討論》 |