溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql 中怎么實現(xiàn)權限控制

發(fā)布時間:2021-08-03 16:58:18 來源:億速云 閱讀:116 作者:Leah 欄目:數(shù)據(jù)庫

本篇文章給大家分享的是有關mysql 中怎么實現(xiàn)權限控制,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

概述

mysql權限控制在不同的上下文和不同的操作水平上都可以進行控制,他們包括如下幾個
** 管理權限可以允許用戶管理mysql server的操作。這些權限控制是全局的,不是針對某個特定的數(shù)據(jù)庫的
** 數(shù)據(jù)庫權限對應到一個數(shù)據(jù)庫和里面的對象。這些權限被用來控制特定的數(shù)據(jù)庫或者全局的,他們能夠應用到所有的數(shù)據(jù)庫
** 數(shù)據(jù)庫對象的權限對應到數(shù)據(jù)庫表,索引,視圖,和存儲過程,可以對數(shù)據(jù)庫內(nèi)部的某個對象進行授權控制。

權限的存儲位置

** 賬號權限信息被存儲在mysql數(shù)據(jù)庫的user,db,tables_priv ,columns_priv ,procs_priv 表中。
** mysql啟動的時候讀取這些信息到內(nèi)存中去,或者在權限變更生效的時候,重新讀取到內(nèi)存中去

mysql 賬號管理

mysql 賬號名字由用戶名和主機名組成。這樣可以允許同已用戶在不同主機上分別控制權限。這一部分描述如何分配賬戶名字包括特定的值和模糊
匹配規(guī)則,在sql語句中,create user, grant ,set password的時候,會用到這些規(guī)則:
- ‘user_name’@’host_name’ 就是賬戶名字的語法規(guī)則
- 僅僅包含用戶名的賬號等同于 ‘username’@’%’
- 如果用戶名是合法的字符,用戶名和主機名不必用引號引起來。在你的用戶名包含’-‘這樣的字符的時候,需要用引號引起來?;蛘哒f主機名有
 通配符的時候需要引起來。
- 引號可以用單引號也可以用雙引號。
- 主機和用戶名必須分別被引號括起來,如果必須要括的話。
mysql在mysql數(shù)據(jù)庫中分別用兩個列去存儲用戶名和主機名:
- 用戶表每個賬戶一行記錄,此表也表示了賬號有哪些全局權限。
- 其他授權表表示了賬號擁有的數(shù)據(jù)庫和數(shù)據(jù)庫內(nèi)的對象。這些表都有用戶名和主機列。每行的賬戶信息和user表的賬戶信息是奕揚的。
用戶名和主機名可以包含特殊字符或者通配符,下面是這些規(guī)則:
用戶名要么是一個非空字符串字面上必須匹配連接字符串中指名的用戶名,或者一個空字符串就會匹配人戶用戶名。空用戶名是一個匿名用戶。
主機名也可以又好多形式,或者通配符:
- 主機名可以是一個IP地址或者一個localhost樣的字符串。
- %和sql中的like的效果是一樣的。例如 ’%.mysql.com’ 就會匹配 a.mysql.com.

權限控制階段1:連接校驗

當你嘗試去連接到mysql服務器,服務器基于下面兩點條件去接受或者拒絕連接:
- 你的身份標識以及正確的密碼
- 你的賬號是否被鎖定了
服務器先校驗密碼是否正確,然后校驗是否鎖定。任何一個步驟失敗,服務器將會拒絕連接。如果通過校驗,服務器接受連接,然后進入第二階段并且等候請求。
認證檢查先檢查user表的三個列,host,user,password。鎖定狀態(tài)是在user表的account_locked列中記錄著的。賬號鎖定狀態(tài)可以通過alter user語句來變更。
你的身份由兩部分來組成,你連接的客戶主機以及你的mysql用戶名。如果用戶名不空,則必須全字符匹配才可以,如果用戶名是空的,則匹配任何用戶。如果用戶表匹配到一個空用戶名,這個用戶被認為是一個匿名用戶,二不是客戶實際提供的。這意味著空用戶名是用來進一步檢查用的也就是階段2.
密碼可以為空,這個不是一個通配符,不意味著匹配任何密碼。它的意思是用戶必須無密碼連接。如果服務起授權一個客戶都安使用一個插件,這樣
該插件實現(xiàn)的認證體系或許沒有用密碼列。在這樣的情況下,外部密碼也可以用來去認證mysql服務器。
非空密碼都是加密存儲的,mysql沒有存儲任何明文密碼。并且用戶提供的密碼也是被加密的。這個加密的密碼后來在連接過程中,來檢查密碼是否正確。
從mysql的觀點來看,加密的密碼才是真正的密碼,所以不要告訴任何人這個加密的密碼。
如果在user表中有多行被匹配,服務器必須決定用哪一個,它的規(guī)則是這樣的:
- 任何時候服務器讀取用戶表到內(nèi)存中的時候,它會排序。
- 服務器檢查的伺候服務器按行順序去檢查
- 服務器使用第一個匹配的行
服務器排序的規(guī)則是無通配符的在前面,統(tǒng)配的在后面。

權限控制階段2:請求校驗

當通過了連接校驗,你和服務器建立了連接后,服務器進入權限控制的第二個階段。你的每個請求,服務器決定出你想做什么操作,然后檢查你是否有
權限去做。此時,grant 表的privilege列就該出場了。這些列可以出自 user,db,tables_priv,columns_priv,procs_priv。不再細講這些表了。

什么時候去權限變更生效

當服務器啟動的時候,grant表的數(shù)據(jù)被讀入內(nèi)存。如果你使用賬戶管理語句去更新權限控制,服務器將會知道這些變更,然后重新讀取它們。如果你
直接用sql語句去更新這些表,你的變更不會生效,直到你重新啟動服務器或者你告訴服務器去重建緩存。
你可以通過執(zhí)行一個刷新權限操作來通知服務器重建緩存。下面三個語句都可以達到效果:
- flush_privileges
- mysqladmin_flush-privileges
- mysqladmin_reload
如果啟動參數(shù)是 –skip-grant-tables ,那么服務器不再校驗任何權限,很不安全。


以上就是mysql 中怎么實現(xiàn)權限控制,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI