mysql中授權(grant)和撤銷授權(revoke)等命令的用法詳解[轉]
MySQL的許可權系統圍繞著兩個概念:
認證->確定使用者是否允許連線資料庫伺服器
授權->確定使用者是否擁有足夠的許可權執行查詢請求等。
如果認證不成功的話,哪麼授權肯定是無法進行的。
revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from”
表 GRANT和REVOKE管理的許可權
許可權 |
描述 |
ALL PRIVILEGES |
影響除WITH GRANT OPTION之外的所有許可權 |
ALTER |
影響ALTER TABLE命令的使用 |
ALTER ROUTINE |
影響建立儲存例程的能力 |
CREATE |
影響CREATE TABLE命令的使用 |
CREATE ROUTINE |
影響更改和棄用儲存例程的能力 |
CREATE TEMPORARY TABLES |
影響CREATE TEMPORARY TABLE命令的使用 |
CREATE USER |
影響建立、棄用;重新命名和撤銷使用者許可權的能力 |
CREATE VIEW |
影響CREATE VIEW命令的使用 |
DELETE |
影響DELETE命令的使用 |
DROP |
影響DROP TABLE命令的使用 |
EXECUTE |
影響使用者執行儲存過程的能力 |
EVENT |
影響執行事件的能力(從MySQL5.1.6 |
FILE |
影響SELECT INTO OUTFILE和LOAD DATA INFILE的使用 |
GRANT OPTION |
影響使用者委派許可權的能力 |
INDEX |
影響CREATE INDEX和DROP INDEX命令的使用 |
INSERT |
影響INSERT命令的使用 |
LOCK TABLES |
影響LOCK TABLES命令的使用 |
PROCESS |
影響SHOW PROCESSLIST命令的使用 |
REFERENCES |
未來MySQL特性的佔位符 |
RELOAD |
影響FLUSH命令集的使用 |
REPLICATION CLIENT |
影響使用者查詢從伺服器和主伺服器位置的能力 |
(續)
許可權 |
描述 |
REPLICATION SLAVE |
複製從伺服器所需的許可權 |
SELECT |
影響SELECT命令的使用 |
SHOW DATABASES |
影響SHOW DATABASES命令的使用 |
SHOW VIEW |
影響SHOW CREATE VIEW命令的使用 |
SHUTDOWN |
影響SHUTDOWN命令的使用 |
SUPER |
影響管理員級命令的使用,如CHANGE、MASTER、KILL thread、mysqladmindebug、PURGE MASTER LOGS和SET GLOBAL |
TRIGGER |
影響執行觸發器的能力(從MySQL5.1.6開始) |
UPDATE |
影響UPDATE命令的使用 |
USAGE |
只連線,不授予許可權 |
1>.改表法。你的帳號不允許從遠端登陸MySql伺服器,只能在localhost。
解決辦法:
在localhost的那臺電腦,登入mysql後,更改 "mysql" 資料庫裡的 "user" 表裡的 "host" 項,從"localhost"改稱"%"
(1). mysql -u root -pvmwaremysql>use mysql;
(2). mysql>update user set host = '%' where user = 'root';
(3). mysql>select host, user from user;
2>. 授權法。例如,你想myuser使用mypassword從任何主機連線到mysql伺服器的話。
(1). GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(2). FLUSH PRIVILEGES;
如果你想允許使用者myuser從ip為192.168.1.6的主機連線到mysql伺服器,並使用mypassword作為密碼
(1). GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(2). FLUSH PRIVILEGES;
如果你想允許使用者myuser從ip為192.168.1.6的主機連線到mysql伺服器的dk資料庫,並使用mypassword作為密碼
(1). GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(3). FLUSH PRIVILEGES;
注意:授權後必須FLUSH PRIVILEGES;否則無法立即生效。
另外一種方法:
3>.在安裝mysql的機器上執行:
1、d:"mysql"bin">mysql -h localhost -u root
//這樣應該可以進入MySQL伺服器
2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
//賦予任何主機訪問資料的許可權
3、mysql>FLUSH PRIVILEGES
//修改生效
4、mysql>EXIT
//退出MySQL伺服器
這樣就可以在其它任何的主機上以root身份登入啦!
4>.檢視 MySQL 使用者許可權
檢視當前使用者(自己)許可權:
show grants;
檢視其他 MySQL 使用者許可權:
show grants for [email protected];
5>.撤銷已經賦予給 MySQL 使用者許可權的許可權。
revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:
grant all on *.* to [email protected];
revoke all on *.* from [email protected];
6>.MySQL grant、revoke 使用者許可權注意事項
1. grant, revoke 使用者許可權後,該使用者只有重新連線 MySQL 資料庫,許可權才能生效。
2. 如果想讓授權的使用者,也可以將這些許可權 grant 給其他使用者,需要選項 “grant option“
grant select on testdb.* to [email protected] with grant option;
這個特性一般用不到。實際中,資料庫許可權最好由 DBA 來統一管理。
7>.使用者和許可權管理命令:
create user :用於建立新的使用者賬戶(從5.0版本開始有這個命令),在建立這個使用者的時候不分配任何許可權,
需要在建立之後通過grant命令來給改使用者分配相應的許可權。
eg:create user [email protected] identified by '123456';
grant select on mydb.* to [email protected];
drop user:刪除一個使用者賬戶(注意在4.1.1版本之前只能刪除沒有任何許可權的賬戶,5.0.2之後可以刪除任何賬戶)
eg:drop user guest;
rename user:可以實現重新命名一個使用者賬號。
grant:用於管理訪問許可權,也就是給使用者賬號授權。當然它同樣可以建立一個新的使用者賬戶。
eg:grant select, insert, update, delete on new_db.* to [email protected]'%' identified by '88888888';
grant 許可權 on 資料庫.表 to 使用者 @ 訪問方式 identified by 密碼
grant select on mydb.* to [email protected] identified by '123456';
BTW:如果需要一個空密碼或者無密碼的賬戶,必須先用Create User命令,然後通過
grant來分配許可權。如果如下操作:
grant all privileges on mydb.* to [email protected]'%' ;而在資料庫user表中沒有先建立visitor
使用者,則會發生1133錯誤"Can't find any matching row in the user table"。grant只能創
有密碼的賬戶。
revoke:刪除一個賬戶,具體檢視MySQL的文件。
8>.mysql中可以給你一個使用者授予如select,insert,update,delete等其中的一個或者多個許可權,主要使用grant命令,用法格式為:
grant 許可權 on 資料庫物件 to 使用者
grant 普通資料使用者,查詢、插入、更新、刪除 資料庫中所有表資料的權利。
grant select on testdb.* to [email protected]’%’
grant insert on testdb.* to [email protected]’%’
grant update on testdb.* to [email protected]’%’
grant delete on testdb.* to [email protected]’%’
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete on testdb.* to [email protected]’%’
9>.grant 資料庫開發人員,建立表、索引、檢視、儲存過程、函式。。。等許可權。
grant 建立、修改、刪除 MySQL 資料表結構許可權。
grant create on testdb.* to [email protected]’192.168.0.%’;
grant alter on testdb.* to [email protected]’192.168.0.%’;
grant drop on testdb.* to [email protected]’192.168.0.%’;
grant 操作 MySQL 外來鍵許可權。
grant references on testdb.* to [email protected]’192.168.0.%’;
grant 操作 MySQL 臨時表許可權。
grant create temporary tables on testdb.* to [email protected]’192.168.0.%’;
grant 操作 MySQL 索引許可權。
grant index on testdb.* to [email protected]’192.168.0.%’;
grant 操作 MySQL 檢視、檢視檢視原始碼 許可權。
grant create view on testdb.* to [email protected]’192.168.0.%’;
grant show view on testdb.* to [email protected]’192.168.0.%’;
grant 操作 MySQL 儲存過程、函式 許可權。
grant create routine on testdb.* to [email protected]’192.168.0.%’; -- now, can show procedure status
grant alter routine on testdb.* to [email protected]’192.168.0.%’; -- now, you can drop a procedure
grant execute on testdb.* to [email protected]’192.168.0.%’;
10>.grant 普通 DBA 管理某個 MySQL 資料庫的許可權。
grant all privileges on testdb to [email protected]’localhost’
其中,關鍵字 “privileges” 可以省略。
11>.grant 高階 DBA 管理 MySQL 中所有資料庫的許可權。
grant all on *.* to [email protected]’localhost’
12>.MySQL grant 許可權,分別可以作用在多個層次上。
1. grant 作用在整個 MySQL 伺服器上:
grant select on *.* to [email protected]; -- dba 可以查詢 MySQL 中所有資料庫中的表。
grant all on *.* to [email protected]; -- dba 可以管理 MySQL 中的所有資料庫
2. grant 作用在單個數據庫上:
grant select on testdb.* to [email protected]; -- dba 可以查詢 testdb 中的表。
3. grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to [email protected];
4. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to [email protected];
5. grant 作用在儲存過程、函式上:
grant execute on procedure testdb.pr_add to ’dba’@’localhost’
grant execute on function testdb.fn_add to ’dba’@’localhost’
注意:修改完許可權以後 一定要重新整理服務,或者重啟服務,重新整理服務用:FLUSH PRIVILEGES。