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 dba@localhost;

 

5>.撤銷已經賦予給 MySQL 用戶權限的權限
revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost

 

6>.MySQL grant、revoke 用戶權限注意事項
1. grant, revoke 用戶權限後,該用戶只有重新連接 MySQL 數據庫,權限才能生效。
2. 如果想讓授權的用戶,也可以將這些權限 grant 給其他用戶,需要選項 "grant option"
grant select on testdb.* to dba@localhost with grant option;
這個特性一般用不到。實際中,數據庫權限最好由 DBA 來統一管理。

 

7>.用戶和權限管理命令: 
create user :用於創建新的用戶賬戶(從5.0版本開始有這個命令),在創建這個用戶的時候不分配任何權限,
需要在創建之後通過grant命令來給改用戶分配相應的權限。
eg:create user guest@localhost identified by '123456';
grant select on mydb.* to guest@localhost; 
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 guest@'%' identified by '88888888'; 
grant 權限 on 數據庫.表 to 用戶 @ 訪問方式 identified by 密碼 
grant select on mydb.* to guest@localhost identified by '123456'; 
BTW: 如果需要一個空密碼或者無密碼的賬戶,必須先用Create User命令,然後通過 
grant來分配權限。如果如下操作: 
grant all privileges on mydb.* to visitor@'%' ;而在數據庫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 common_user@’%’
grant insert on testdb.* to common_user@’%’
grant update on testdb.* to common_user@’%’
grant delete on testdb.* to common_user@’%’
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete on testdb.* to common_user@’%’

 

9>.grant 數據庫開發人員,創建表、索引、視圖、存儲過程、函數。。。等權限。
grant 創建、修改、刪除 MySQL 數據表結構權限。
grant create on testdb.* to developer@’192.168.0.%’;
grant alter on testdb.* to developer@’192.168.0.%’;
grant drop on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 外鍵權限。
grant references on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 臨時表權限。
grant create temporary tables on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 索引權限。
grant index on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 視圖、查看視圖源代碼 權限。
grant create view on testdb.* to developer@’192.168.0.%’;
grant show view on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 存儲過程、函數 權限。
grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure status
grant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a procedure
grant execute on testdb.* to developer@’192.168.0.%’;
 
10>.grant 普通 DBA 管理某個 MySQL 數據庫的權限。
grant all privileges on testdb to dba@’localhost’
其中,關鍵字 “privileges” 可以省略。
 
11>.grant 高級 DBA 管理 MySQL 中所有數據庫的權限。
grant all on *.* to dba@’localhost’
 
12>.MySQL grant 權限,分別可以作用在多個層次上。
1. grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
2. grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
3. grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
4. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
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 common_user@'%'
grant insert on testdb.* to common_user@'%'
grant update on testdb.* to common_user@'%'
grant delete on testdb.* to common_user@'%'
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete on testdb.* to common_user@'%'

二、grant 數據庫開發人員,創建表、索引、視圖、存儲過程、函數等權限

grant 創建、修改、刪除 MySQL 數據表結構權限:
grant create on testdb.* to developer@'192.168.0.%';
grant alter  on testdb.* to developer@'192.168.0.%';
grant drop   on testdb.* to developer@'192.168.0.%'; 
grant 操作 MySQL 外鍵權限:
grant references on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 臨時表權限:
grant create temporary tables on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 索引權限:
grant index on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 視圖、查看視圖源代碼權限:
grant create view on testdb.* to developer@'192.168.0.%';
grant show   view on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 存儲過程、函數權限:
grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status
grant alter  routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure
grant executeon testdb.* to developer@'192.168.0.%';

三、grant 普通 DBA 管理某個 MySQL 數據庫的權限
grant all privileges on testdb to dba@'localhost';
其中,關鍵字 “privileges” 可以省略。

四、grant 高級 DBA 管理 MySQL 中所有數據庫的權限
grant all on *.* to dba@'localhost' 

五、MySQL grant 權限,分別可以作用在多個層次上
1. grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表
grant all    on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
2. grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
3. grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
這裏在給一個用戶授權多張表時,可以多次執行以上語句。例如:
grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345'; 
grant select on smp.mo_sms to mo_user@'%' identified by '123345';        
4. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
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 dba@localhost;

七、撤銷已經賦予給 MySQL 用戶權限的權限
revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:
grant  all on *.* to   dba@localhost;
revoke all on *.* from dba@localhost;

八、MySQL grant、revoke 用戶權限注意事項
1. grant, revoke 用戶權限後,該用戶只有重新連接 MySQL 數據庫,權限才能生效。
2. 如果想讓授權的用戶,也可以將這些權限 grant 給其他用戶,需要選項"grant option"
grant select on testdb.* to dba@localhost 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表指定列級權限。這裏指定的權限適用於一個表的特定列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章