Mysql 許可權管理

muxinqing發表於2014-05-14

Mysql 賬戶許可權資訊儲存在 mysql 資料庫 user、db、host、table_priv、colunms_priv和procs_priv表中,在Mysql 啟動時伺服器將這些資料庫表內容讀入記憶體中。

    Mysql 許可權層級主要分為: 伺服器、資料庫、表、列。按許可權的使用環境則主要分為:普通許可權、管理員許可權、特殊許可權,其中普通許可權主要應用於應用程式連結資料庫,管理員許可權則主要用於伺服器管理。

mysql 許可權列表詳解:

分類 許可權 描述 應用層級
普通許可權
(應用程式)
CREATE 允許使用者建立資料庫或表 資料庫、表或索引
DROP 允許使用者刪除資料庫或表 資料庫或表
GRANT OPTION 允許使用者授予許可權 資料庫、表或儲存的程式
ALTER 允許使用者改變表結構
DELETE 允許使用者刪除現存表的行
INDEX 允許使用者建立、修改表索引
INSERT 允許使用者在表中插入新的記錄
SELECT 允許使用者檢視錶記錄
UPDATE 允許使用者修改表中現有的記錄
CREATE VIEW 允許使用者建立檢視 檢視
SHOW VIEW 允許使用者檢視檢視建立語句 檢視
ALTER ROUTINE 允許使用者修改儲存過程、函式 儲存的程式
CREATE ROUTINE 允許使用者建立儲存過程、函式 儲存的程式
EXECUTE 允許使用者允許以建立的子程式 儲存的程式
管理員 FILE 允許使用者使用select…into outfile、load data infile 將資料從檔案讀入表或從表讀入檔案 伺服器主機上的檔案訪問
CREATE TEMPORARY TABLES 允許使用者建立臨時表 伺服器管理
LOCK TABLES 允許使用者使用LOCK TABLES 伺服器管理
CREATE USER 允許使用者使用CREATE USER,DORP USER,RENAME USER,REVOKE ALL PRIVILEGES 伺服器管理
PROCESS 允許使用者使用show processlist 檢視執行緒 伺服器管理
RELOAD 允許使用者使用flush 、過載授權表、清空授權、主機、日誌等 伺服器管理
REPLICATION CLIENT 允許使用者詢問從屬伺服器或主機伺服器地址 伺服器管理
REPLICATION SLAVE 用於主從複製性從屬伺服器(從主伺服器中讀取二進位制日誌檔案) 伺服器管理
SHOW DATABASES 允許使用show databases 檢視所有的資料庫列表,沒有這個許可權,使用者只能看到擁有許可權的資料庫 伺服器管理
SHUTDOWN 允許使用mysqladmin shutdown 關閉mysql伺服器 伺服器管理
SUPER 允許使用change master,kill,purge master logs 和set global 語句,mysqladmin debug 命令,當資料庫達到max_connections 允許連線一次 伺服器管理
特殊 all\all perivileges 授予所有許可權 伺服器管理
usage 僅允許使用者登入,但不授予許可權 伺服器管理

 

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 execute        on 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; 

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 來統一管理。

----------------------------------------------------------------------------------------------

授權命令GRANT 語句的語法如下: 
GRANT privileges (columns) 
ON what 
TO user IDENTIFIEDBY "password" 
WITH GRANT OPTION 
對使用者授權 
mysql>grant rights on database.* to  identified by "pass"; 
例1: 
增加一個使用者test1密碼為abc,讓他可以在任何主機上登入,並對所有資料庫有查詢、插入、修改、刪除的許可權。 
grant select,insert,update,delete on *.* to " Identified by "abc"; 
ON 子句中*.* 說明符的意思是“所有資料庫,所有的表” 
例2: 
增加一個使用者test2密碼為abc, 讓他只可以在localhost上登入,並可以對資料庫mydb進行查詢、插入、修改、刪除的操作。 
grant select,insert,update,delete on mydb.* to  identified by "abc"; 
例子3 
增加一個使用者custom,他能從主機localhost、server.domain和whitehouse.gov連線。他只想要從 localhost存取bankaccount資料庫,從whitehouse.gov存取expenses資料庫和從所有3臺主機存取customer 資料庫。他想要從所有3臺主機上使用口令stupid。

為了使用GRANT語句設定個使用者的許可權,執行這些命令: 
shell> mysql --user=root mysql 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 
ON bankaccount.* TO custom@localhost IDENTIFIED BY 'stupid'; 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 
ON expenses.* TO custom@whitehouse.gov IDENTIFIED BY 'stupid'; 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 
ON customer.* TO custom@'%' IDENTIFIED BY 'stupid'; 
============================================== 
許可權資訊用user、db、host、tables_priv和columns_priv表被儲存在mysql資料庫中(即在名為mysql的資料庫中)。 
許可權 列 Context 
select Select_priv 表 
insert Insert_priv 表 
update Update_priv 表 
delete Delete_priv 表 
index Index_priv 表 
alter Alter_priv 表 
create Create_priv 資料庫、表或索引 
drop Drop_priv 資料庫或表 
grant Grant_priv 資料庫或表 
references References_priv 資料庫或表 
reload Reload_priv 伺服器管理 
shutdown Shutdown_priv 伺服器管理 
process Process_priv 伺服器管理 
file File_priv 在伺服器上的檔案存取


1.select、insert、update和delete許可權 允許你在一個資料庫現有的表上實施操作,是基本許可權 
2.alter許可權允許你使用ALTER TABLE 
3.create和drop許可權允許你建立新的資料庫和表,或拋棄(刪除)現存的資料庫和表 如果你將mysql資料庫的drop許可權授予一個使用者,該使用者能拋棄儲存了MySQL存取許可權的資料庫! 
4.grant許可權允許你把你自己擁有的那些許可權授給其他的使用者。 
你不能明顯地指定一個給定使用者應該被拒絕存取。即,你不能明顯地匹配一個使用者並且然後拒絕連線。你不能指定一個使用者有權建立立或拋棄一個資料庫中的表,也不能建立或拋棄資料庫本身。 可以同時列出許多被授予的單個許可權。 
例如,如果想讓使用者能讀取和修改已有表的內容,但又不允許建立新表或刪除表,可按如下授權: 
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO  IDENTIFIEDBY "pass"


以上是我從別的地方複製過來後稍作修改的文字,下面自己寫一些需要注意的東西。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29065182/viewspace-1161463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章