首頁  >  文章  >  資料庫  >  MySQL中權限管理的詳圖介紹

MySQL中權限管理的詳圖介紹

黄舟
黄舟原創
2017-03-01 14:10:011677瀏覽


權限管理


MySQL權限系統透過下面兩個階段進行認證:

  • #對連線的使用者進行身分認證,合法的使用者通過認證,不合法的使用者拒絕連線。

  • 對通過認證的合法使用者授予對應的權限,使用者可以透過再這些權限範圍內對資料庫做對應的操作。
    在權限存取過程中,主要涉及到mysql資料庫下user表和db表。 user表的資料結構如下:
    MySQL中權限管理的詳圖介紹
    db表資料結構如下:
    MySQL中權限管理的詳圖介紹
    表的說明:其中包含使用者列、權限列、安全性列和資源控制列。用的最頻繁的是使用者列和權限列,權限分為普通權限和管理權限。普通權限使用者資料庫的操作如select_priv、insert_priv等。管理權限主要用來管理資料庫的操作,例如process_priv、super_priv等。
    用戶進行連線的時候,權限表的存取過程:

  • 先從user表中的host、user和password這三個欄位判斷連線的ip、用戶名以及密碼是否存在表中,如果存在,則通過驗證,否則拒絕連線。

  • 經過驗證之後,依照下列權限表的順序得到資料庫權限:user->db->tables->priv->columns_priv。全域權限,覆蓋局部權限。例如一個使用者在user表中擁有選擇權限,那麼他將對所有資料中的所有資料表所有的欄位都有選擇權限。
    MySQL中權限管理的詳圖介紹
    權限查找詳細描述:當使用者通過權限認證之後,進行權限分配時候,按照user->db->tables_priv->columns_priv的順序進行權限分配,即先檢查權限表user,如果user表中對應的權限為Y,此時使用者對應所有的資料庫權限為Y,將不再檢查db、tables_priv、columns_priv;如果為N,則到db表中進行查找使用者對於特定資料庫權限,如果得到db中的Y權限,則不在查找,否則檢查tables_priv,看該資料庫對應的特定表權限,如果為Y,則不在查找,否則檢查columns_priv表,查看對應的特定列權限。這一點對於我們授予使用者權限很重要。

帳號管理

建立用戶

建立用戶,可以使用grant語法建立或直接操作user表。
方法一:
直接操作use表
insert into user(Host,User,Password) values(“127.0.0.1 ”,”test”,password(“51testit”));
方法二:
格式CREATE USER 'username'@'host' IDENTIFIED BY 'password';  
eg:CREATE USER 'test'@ '127.0.0.1' IDENTIFIED BY '51testit';  
MySQL中權限管理的詳圖介紹
建立之後,登入如下:
MySQL中權限管理的詳圖介紹
MySQL加密方式: MYSQL323加密中產生的是16位元字串,而在MySQLSHA1中生存的是41位字串,其中是不加入實際的密碼運算中,透過觀察在很多用戶中都攜帶了”“,在實際破解過程中去掉”*”,也就是說MySQLSHA1加密的密碼的實際位數是40位。
Host欄位描述

  • Host值可以是主機名稱或IP號,或是locahost代表本機。

  • 可以再host列值前面使用通配符”%”和”_”,”%”代表匹配任何主機,空的Host值等於”%”。如”%.myweb.com”,匹配所有mysql.com網域的所有主機。案例如下:

##myweb.wangppspps,從myweb.wang連接%pps pps,從任何主機連接%」任何用戶,從任何主機連接122.164.35.127ppspps,從122.164.35.127連接#122.164.35.%
Host User 解析
#############122.164.35.%###############122.164.35.%### ###pps######pps,從122.164.35.類型子網路的任何主機連接############

查看使用者權限

對於上面建立的test,我沒有進行任何授權操作,當我使用test使用者去操作資料庫時候,發現:
MySQL中權限管理的詳圖介紹##沒有資料庫操作權限,怎樣才能查看使用者擁有的權限呢?
查看權限
方法一:
show grants for test@127.0.0.1;
方法二:
查看user表中記錄的權限。
select * from mysql.user where user='test' and host='127.0.0.1' \G;

MySQL中權限管理的詳圖介紹

授予權限

#語法格式如下:

grant [privilege1|privilege2|all privileges] on dbName|
.tableName 或 to user@hostName ; 當給test使用者授予xxpt選擇權限時:
grant select On xxpt. * to test.127.0.0.1;
db表發生了變化,新增加一筆記錄。但是user表並沒有改變。如下:

MySQL中權限管理的詳圖介紹此時,可以使用test用戶進行資料查詢操作,但不能進行增、刪、改。於是授予其關於xxpt資料庫的所有權限。
grant all privileges on xxpt.* to test@127.0.0.1;
使用者test權限如下:

MySQL中權限管理的詳圖介紹此時可以更新資料

MySQL中權限管理的詳圖介紹#管理權限sueper、process、file授予
grant sueper,process,file On
. to 'test'@'127.0.0.1'; 語句中on後面只能是
. 備註:usage 權限用於登錄,不能進行任何操作。

刪除權限

使用grant新增權限,使用revoke進行權限回收。當然回收權限,也可以直接對user、db、tables_priv和columns_priv表進行操作。但是usage權限是沒辦法收回的。

如回收test對所有資料庫的讀寫權限:
revoke select ,insert on
. from test@127.0.0.1;##修改密碼

1.使用mysqladmin

2.使用set password for test@127.0.0.1 =password('isayhello');

3.透過grant usage
grant usage on
.
to 'test '@'127.0.0.1' identified by 'isayhello'; 4.直接修改user表update user set Password=password(“newpassword”) where

***;補充mysql中權限

CREATE#資料庫、表或索引建立資料庫、表格或索引權限DROP#資料庫或資料表刪除資料庫或表格權限GRANT OPTION#資料庫、資料表或已儲存的程式賦予權限選項REFERENCES資料庫或表格 ALTER#表變更表,例如新增欄位、索引等DELETE索引權限已插入權限#查詢權限建立視圖權限ALTER ROUTINE預存程序CREATE ROUTINE預存程序EXECUTE預存程序FILE#伺服器主機上的檔案存取CREATE TEMPORARY TABLES伺服器管理LOCK TABLES伺服器管理CREATE USER伺服器管理##建立使用者權限伺服器管理#查看程式權限伺服器管理#伺服器管理##REPLICATION SLAVE伺服器管理#執行kill執行緒權限
權限

               

權限等級

               

權限說明

##刪除資料權限

INDEX

#表

INSERT

SELECT

######################################################################################################################################################################### ############UPDATE############表###

更新權限

CREATE VIEW

##」檢視

##CREATE VIEW

##」檢視

SHOW VIEW

檢視

##檢視檢視權限

更改預存程序權限

建立預存程序權限

執行儲存程序權限

#檔案存取權

#建立臨時表格權限

鎖定表權限

PROCESS

RELOAD

## 

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

REPLICATION CLIENT

複製權限

##複製權限

SHOW DATABASES

伺服器管理
查看資料庫權限

SHUTDOWN

伺服器管理
#關閉資料庫權限

##SUPER

伺服器管理

 MYSQL的權限如何分佈,就是針對表格可以設定什麼權限,針對欄位可以設定什麼權限等等,這個可以從官方文件中的一個表格來說明:可能的設定的權限'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'#'Select', 'Insert', 'Update', 'References'

權限分佈

表格權限

列權限

程式權限


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



#### 以上就是MySQL中權限管理的詳圖介紹的內容,更多相關內容請關注PHP中文網(www.php.cn) ! ##########
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn