天天看點

MySQL之權限管理

一、MySQL權限簡介

    關于mysql的權限簡單的了解就是mysql允許你做你全力以内的事情,不可以越界。比如隻允許你執行select操作,那麼你就不能執行update操作。隻允許你從某台機器上連接配接mysql,那麼你就不能從除那台機器以外的其他機器連接配接mysql。

    那麼Mysql的權限是如何實作的呢?這就要說到mysql的兩階段驗證,下面詳細介紹:第一階段:伺服器首先會檢查你是否允許連接配接。因為建立使用者的時候會加上主機限制,可以限制成本地、某個IP、某個IP段、以及任何地方等,隻允許你從配置的指定地方登陸。第二階段:如果你能連接配接,Mysql會檢查你發出的每個請求,看你是否有足夠的權限實施它。比如你要更新某個表、或者查詢某個表,Mysql會檢視你對哪個表或者某個列是否有權限。再比如,你要運作某個存儲過程,Mysql會檢查你對存儲過程是否有執行權限等。

    MYSQL到底都有哪些權限呢?從官網複制一個表來看看:

權限

權限級别

權限說明

CREATE

資料庫、表或索引

建立資料庫、表或索引權限

DROP

資料庫或表

删除資料庫或表權限

GRANT OPTION

資料庫、表或儲存的程式

賦予權限選項

REFERENCES

ALTER

更改表,比如添加字段、索引等

DELETE

删除資料權限

INDEX

索引權限

INSERT

插入權限

SELECT

查詢權限

UPDATE

更新權限

CREATE VIEW

視圖

建立視圖權限

SHOW VIEW

檢視視圖權限

ALTER ROUTINE

存儲過程

更改存儲過程權限

CREATE ROUTINE

建立存儲過程權限

EXECUTE

執行存儲過程權限

FILE

伺服器主機上的檔案通路

檔案通路權限

CREATE TEMPORARY TABLES

伺服器管理

建立臨時表權限

LOCK TABLES

鎖表權限

CREATE USER

建立使用者權限

PROCESS

檢視程序權限

RELOAD

執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等指令的權限

REPLICATION CLIENT

複制權限

REPLICATION SLAVE

SHOW DATABASES

檢視資料庫權限

SHUTDOWN

關閉資料庫權限

SUPER

執行kill線程權限

    MYSQL的權限如何分布,就是針對表可以設定什麼權限,針對列可以設定什麼權限等等,這個可以從官方文檔中的一個表來說明:

權限分布

可能的設定的權限

表權限

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列權限

'Select', 'Insert', 'Update', 'References'

過程權限

'Execute', 'Alter Routine', 'Grant'

 二、MySQL權限經驗原則:

    權限控制主要是出于安全因素,是以需要遵循一下幾個經驗原則:

    1、隻授予能滿足需要的最小權限,防止使用者幹壞事。比如使用者隻是需要查詢,那就隻給select權限就可以了,不要給使用者賦予update、insert或者delete權限。

    2、建立使用者的時候限制使用者的登入主機,一般是限制成指定IP或者内網IP段。

    3、初始化資料庫的時候删除沒有密碼的使用者。安裝完資料庫的時候會自動建立一些使用者,這些使用者預設沒有密碼。

    4、為每個使用者設定滿足密碼複雜度的密碼。

    5、定期清理不需要的使用者。回收權限或者删除使用者。

三、MySQL權限實戰:

    1、GRANT指令使用說明:

    先來看一個例子,建立一個隻允許從本地登入的超級使用者jack,并允許将權限賦予别的使用者,密碼為:jack.

    GRANT指令說明:

    ALL PRIVILEGES 是表示所有權限,你也可以使用select、update等權限。

    ON 用來指定權限針對哪些庫和表。

    *.* 中前面的*号用來指定資料庫名,後面的*号用來指定表名。

    TO 表示将權限賦予某個使用者。

    IDENTIFIED BY 指定使用者的登入密碼。

    WITH GRANT OPTION 這個選項表示該使用者可以将自己擁有的權限授權給别人。注意:經常有人在建立操作使用者的時候不指定WITH GRANT OPTION選項導緻後來該使用者不能使用GRANT指令建立使用者或者給其它使用者授權。

備注:可以使用GRANT重複給使用者添權重限,權限疊加,比如你先給使用者添加一個select權限,然後又給使用者添加一個insert權限,那麼該使用者就同時擁有了select和insert權限。

    2、重新整理權限

    使用這個指令使權限生效,尤其是你對那些權限表user、db、host等做了update或者delete更新的時候。以前遇到過使用grant後權限沒有更新的情況,隻要對權限做了更改就使用FLUSH PRIVILEGES指令來重新整理權限。

    3、檢視權限

    4、回收權限

    5、删除使用者

    6、對賬戶重命名

    7、修改密碼

本文轉自不要超過24個字元部落格51CTO部落格,原文連結http://blog.51cto.com/cstsncv/2059718如需轉載請自行聯系原作者

cstsncv