MySQL中授權(grant)和撤銷授權(revoke)命令之用法

來源:互聯網
上載者:User

標籤: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、mysqladmin debug、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:mysqlbin>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


MySQL 賦予使用者權限命令的簡單格式可概括為:
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]‘%‘

二、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 executeon testdb.* to [email protected]‘192.168.0.%‘;

三、grant 普通 DBA 管理某個 MySQL 資料庫的許可權
grant all privileges on testdb to [email protected]‘localhost‘;
其中,關鍵字 “privileges” 可以省略。

四、grant 進階 DBA 管理 MySQL 中所有資料庫的許可權
grant all on *.* to [email protected]‘localhost‘ 

五、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];
這裡在給一個使用者授權多張表時,可以多次執行以上語句。例如:
grant select(user_id,username) on smp.users to [email protected]‘%‘ identified by ‘123345‘; 
grant select on smp.mo_sms to [email protected]‘%‘ identified by ‘123345‘;        
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‘

六、查看 MySQL 使用者權限
查看目前使用者(自己)許可權:
show grants;
查看其他 MySQL 使用者權限:
show grants for [email protected];

七、撤銷已經賦予給 MySQL 使用者權限的許可權
revoke 跟 grant 的文法差不多,只需要把關鍵字 “to” 換成 “from” 即可:
grant  all on *.* to   [email protected];
revoke all on *.* from [email protected];

八、MySQL grant、revoke 使用者權限注意事項
1. grant, revoke 使用者權限後,該使用者只有重新串連 MySQL 資料庫,許可權才會生效。
2. 如果想讓授權的使用者,也可以將這些許可權 grant 給其他使用者,需要選項"grant option"
grant select on testdb.* to [email protected] with grant option; 
這個特性一般用不到。實際中,資料庫許可權最好由 DBA 來統一管理。

 

九、補充
mysql授權表共有5個表:user、db、host、tables_priv和columns_priv , 授權表的內容有如下用途:

user表
user表列出可以串連伺服器的使用者及其口令,並且它指定他們有哪種全域(超級使用者)許可權。在user表啟用的任何許可權均是全域許可權,並適用於所有資料庫。例如,如果你啟用了DELETE許可權,在這裡列出的使用者可以從任何錶中刪除記錄,所以在你這樣做之前要認真考慮。

db表
db表列出資料庫,而使用者有許可權訪問它們。在這裡指定的許可權適用於一個資料庫中的所有表。

host表
host表與db表結合使用在一個較好層次上控制特定主機對資料庫的存取權限,這可能比單獨使用db好些。這個表不受GRANT和REVOKE語句的影響,所以,你可能發覺你根本不是用它。

tables_priv表
tables_priv表指定表級許可權,在這裡指定的一個許可權適用於一個表的所有列。

columns_priv表
columns_priv表指定列級許可權。這裡指定的許可權適用於一個表的特定列。

本文出自 “sukhoi” 部落格,謝絕轉載!

MySQL中授權(grant)和撤銷授權(revoke)命令之用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.