mysql許可權說明

2021-03-31 16:32:26 字數 2747 閱讀 3623

-> identified by "managedb"

-> with grant option;

現在改變這個使用者的口令為funkychicken,命令格式如下:

mysql> grant usage on *.*

-> to [email protected].***

-> identified by "funkychicken";

請注意我們沒有賦予任何另外的許可權(the usage許可權只能允許使用者登入),但是使用者已經存在的許可權不會被改變。

現在讓我們建立乙個新的名為jessica的使用者,他可以從host.***域的任意機器連線到mysql。他可以更新資料庫中使用者的姓名和email位址,但是不需要查閱其它資料庫的資訊。也就是說他對db資料庫具有唯讀的許可權(例如,select),但是他可以對users表的name列和email列執行update操作。命令如下:

mysql> grant select on db.*

-> to jessica@%.host.***

-> identified by "jessrules";

mysql> grant update (name,email) on db.users

-> to jessica@%.host.***;

請注意在第乙個命令中我們在指定jessica可以用來連線的主機名時使用了%(萬用字元)符號。此外,我們也沒有給他向其他使用者傳遞他的許可權的能力,因為我們在命令的最後沒有帶上with grant option。第二個命令示範了如何通過在賦予的許可權後面的圓括號中用逗號分隔的列的列表對特定的資料列賦予許可權。

使用revoke

正如你所預期的那樣,revoke命令是用來去除乙個使用者以前被賦予的許可權的。命令的語法如下:

mysql> revoke [()]

-> on from ;

這個命令中各部分的功能和在上面的grant命令中時一樣。要去除jessica的合作者的drop許可權(例如,如果他經常錯誤地刪除資料庫和表),你可以使用下面的命令:

mysql> revoke drop on *.* from idiot@%.host.***;

去除乙個使用者的登入許可權大概是唯一不能使用revoke的。revoke all on *.*會去除使用者的所有許可權,但是他還可以登入,要完全地刪除乙個使用者,你需要在user表中刪除相應的記錄:

mysql> delete from user

-> where user="idiot" and host="%.host.***";

訪問控制技巧

由於mysql中訪問控制系統工作的方法的影響,在建立你的使用者之前你必須知道兩個特徵。

當建立的使用者只能從mysql服務執行的計算機上登入到mysql服務(也就是說,你需要他們tel***到伺服器並在那裡執行mysql的客戶端程式,或者是使用象php這樣的伺服器端指令碼語言進行通訊),你大概會問自己grant命令的部分應該填什麼內容。如果服務是執行在.host.***

。你是應該將使用者設定為[email protected].***

還是username@localhost呢?

答案是,你不能依賴其中的任何一種來處理任何連線。從理論上來說,如果使用者在連線時(無論是使用mysql客戶端還是使用php的mysql_connect函式)指定了主機名,這個主機名必須與訪問控制系統中的記錄匹配。但是因為你也許不想強迫你的使用者指定主機名(事實上,mysql客戶端的使用者也許根本不會指定主機名),你最好使用下面這種工作環境。

對於使用者需要能夠從mysql服務在其上執行的機器上連線mysql的情況,在mysql訪問控制系統中建立兩個使用者記錄:乙個使用實際的主機名(例如,[email protected].***)

,另乙個使用localhost(例如,username@localhost),當然,你需要為兩個使用者分別grant/revoke所有的許可權。

mysql管理者所要面對的另乙個帶有普通性的問題是乙個其中的主機名使用了萬用字元的使用者記錄(例如,前面提到jessica@%.host.***)沒起作用。發生這種情況,一般是由於mysql訪問控制系統中記錄的優先順序的問題。具體地說,越具體的主機名優先順序越高(例如,.host.***

是最具體的,%.host.***是比較具體的,而%是最不具體的)。

在乙個新安裝後,mysql訪問控制系統包含兩個匿名使用者記錄(它允許在當前主機上使用任何使用者名稱進行連線--這兩個記錄分別支援從localhost連線以及從伺服器的實現的主機名進行連線),以及兩個root使用者目錄。我們上面討論的情況發生時是由於匿名使用者目錄的優先順序比我們的新記錄高,因為他們的主機名更具體。

讓我們看看.host.***

上user表的內容,我們假定已經新增了jessica的記錄。資料行是按照mysql服務在確認連線時的優先順序排列的:

正如你看到的,因為jessica的記錄的主機名最不具體,它的優先順序最低。當jessica試圖從.host.***

連線時,mysql服務將他的連線匹配為乙個匿名使用者記錄(空白的user值與任何人匹配)。因為這些匿名記錄不需要口令,而也許jessica輸入了他的口令,mysql將拒絕這個連線。即使jessica沒有輸入口令,他可能也只被給予了匿名使用者的許可權(非常有限),而不是他原來被賦予的許可權。

解決這個問題的方法是,要麼你刪除匿名使用者的記錄(delete from user where user=""),要麼再為所有的可能從localhost連線的使用者指定兩條記錄(例如,相對於localhost以及相對於伺服器的實際主機名)

因為要為每個使用者維護三個使用者記錄(以及相應的三套許可權)會很麻煩,所以我們推薦你刪除匿名使用者,除非你需要用他們來完成什麼特殊的應用

mysql許可權說明

mysql許可權說明 關於許可權問題 1.mysql是根據使用者名稱和主機名來唯一確定乙個使用者的.例如 db name localhost 2.主機位址使用 號為萬用字元.在這裡,任何相同的使用者名稱,不同ip的賬號,都可以成功匹配 db name 3.如果mysql使用者表裡面有明確寫明ip位址...

mysql許可權說明

yum安裝後 首先執行 systemctl start mysqld 命令啟動mysql 然後執行 grep temporary password var log mysqld.log 命令即可檢視預設密碼。建立資料庫 create databasesname use databasesname 建...

linux許可權說明

檢視檔案許可權的語句 在終端輸入 ls l 是檔名 那麼就會出現相類似的資訊,主要都是這些 rw rw r 一共有10位數 其中 最前面那個 代表的是型別 中間那三個 rw 代表的是所有者 user 然後那三個 rw 代表的是組群 group 最後那三個 r 代表的是其他人 other 然後我再解釋...