溫馨提示×

溫馨提示×

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

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

MySQL中怎么設(shè)置用戶授權(quán)

發(fā)布時間:2021-08-13 16:26:37 來源:億速云 閱讀:151 作者:Leah 欄目:數(shù)據(jù)庫

MySQL中怎么設(shè)置用戶授權(quán),針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

使用SHOW GRANTS語句顯示用戶的授權(quán)

你可以直接查看授權(quán)表,也可以使用SHOW GRANTS語句查看某個用戶的授權(quán),這種情況下使用SHOW GRANTS語句顯然要方便一些。

語法:SHOW GRANTS FOR user_name

為了容納對任意主機的用戶授予的權(quán)利,MySQL支持以格式指定user_name值。

例如,下面的語句顯示一個用戶admin的權(quán)限:

mysql>SHOW GRANTS FOR ;

其結(jié)果為創(chuàng)建該用戶的GRNAT授權(quán)語句:

GRANT RELOAD, SHUTDOWN, PROCESS ON *.* TO  IDENTIFIED BY PASSWORD 28e89ebc62d6e19a

密碼是加密后的形式。

使用GRANT語句創(chuàng)建用戶并授權(quán)

GRANT語句的語法

GRANT priv_type (columns)
ON what
TO user IDENTIFIED BY “password”
WITH GRANT OPTION


要使用該語句,需要填寫以下部分:

·priv_type 分配給用戶的權(quán)限。

priv_type可以指定下列的任何一個:

ALL PRIVILEGES      FILE                RELOAD

ALTER               INDEX               SELECT

CREATE              INSERT              SHUTDOWN

DELETE              PROCESS             UPDATE

DROP                REFERENCES          USAGE

ALL是ALL PRIVILEGES的一個同義詞,REFERENCES還沒被實現(xiàn),USAGE當(dāng)前是“沒有權(quán)限”的一個同義詞。它能用在你想要創(chuàng)建一個沒有權(quán)限用戶的時候。

對于表,你能指定的唯一priv_type值是SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、INDEX和ALTER。

對于列,你能指定的唯一priv_type值是(即,當(dāng)你使用一個column_list子句時)是SELECT、INSERT和UPDATE。

·columns 權(quán)限適用的列。

這是可選的,只來設(shè)置列專有的權(quán)限。如果命名多于一個列,則用逗號分開。

·what 權(quán)限應(yīng)用的級別

GRANT允許系統(tǒng)主管在4個權(quán)限級別上授權(quán)MySQL用戶的權(quán)利:

·全局級別

全局權(quán)限作用于一個給定服務(wù)器上的所有。這些權(quán)限存儲在.user表中。 你能通過使用ON *.*語法設(shè)置全局權(quán)限

·數(shù)據(jù)庫級別

數(shù)據(jù)庫權(quán)限作用于一個給定數(shù)據(jù)庫的所有表。這些權(quán)限存儲在mysql.db和mysql.host表中。 你能通過使用ON db_name.*語法設(shè)置數(shù)據(jù)庫權(quán)限。如果你指定ON *并且你有一個當(dāng)前數(shù)據(jù)庫,你將為該數(shù)據(jù)庫設(shè)置權(quán)限。(警告:如果你指定ON *而你沒有一個當(dāng)前數(shù)據(jù)庫,你將影響全局權(quán)限!)

·表級別

表權(quán)限作用于一個給定表的所有列。這些權(quán)限存儲在mysql.tables_priv表中。你能透過 ON tbl_name,為具體的表名設(shè)置權(quán)限。

·列級別

列權(quán)限作用于在一個給定表的單個列。這些權(quán)限存儲在mysql.columns_priv表中。你可以通過指定一個columns子句將權(quán)限授予特定的列,同時要在ON子句中指定具體的表。

對與一個表或列的權(quán)限是由4個權(quán)限級別的邏輯或形成的。例如,如果mysql.user表指定一個用戶有一個全局select權(quán)限,它不能被數(shù)據(jù)庫、表或列的一個條目否認。

對于一個列的權(quán)限能如下計算:

global privileges
OR (database privileges AND host privileges)
OR table privileges
OR column privileges


在大多數(shù)情況下,你只授予用戶一個權(quán)限級別上的權(quán)限,因此現(xiàn)實通常不象上面所說的那樣復(fù)雜。

user 使用權(quán)限的用戶。

為了容納對任意主機的用戶授予的權(quán)利,MySQL支持以格式指定user_name值。如果你想要指定一個特殊字符的一個user字符串(例如“-”),或一個包含特殊字符或通配符的host字符串(例如“%”),你可以用括號括起能用戶或主機名字 (例如,)。

你能在主機名中指定通配符。例如,"適用于在loc.gov域中任何主機的user,并且"適用于在144.155.166類 C 子網(wǎng)中任何主機的user。

簡單形式的user是"的一個同義詞。注意:如果你允許匿名用戶連接MySQL服務(wù)器(它是缺省的),你也應(yīng)該增加所有本地用戶如 ,因為否則,當(dāng)用戶試圖從本地機器上登錄到MySQL服務(wù)器時,對于mysql.user表中的本地主機的匿名用戶條目將被使用!匿名用戶通過插入有User=的條目到mysql.user表中來定義。通過執(zhí)行這個查詢,你可以檢驗它是否作用于你:

mysql> SELECT Host,User FROM mysql.user WHERE User=;

·password 分配給該用戶的口令。這也是可選的。

在MySQL 3.22.12或以后,如果創(chuàng)建一個新用戶或如果你有全局授予權(quán)限,用戶的口令將被設(shè)置為由IDENTIFIED BY子句指定的口令,如果給出一個。如果用戶已經(jīng)有了一個口令,它被一個新的代替。

警告:如果你創(chuàng)造一個新用戶但是不指定一個IDENTIFIED BY子句,用戶沒有口令。這是不安全的。

·WITH GRANT OPTION子句是可選的。

WITH GRANT OPTION子句給與用戶有授予其他用戶在指定的權(quán)限水平上的任何權(quán)限的能力。你應(yīng)該謹慎對待你授予他grant權(quán)限的用戶,因為具有不同權(quán)限的兩個用戶也許能合并權(quán)限!

創(chuàng)建用戶并授權(quán)的實例

創(chuàng)建一個具有超級用戶權(quán)利的用戶:

mysql>GRANT ALL ON *.* TO  IDENTIFIED BY "passwd"->WITH GRANT OPTION

該語句將在user表中為創(chuàng)建一個記錄,打開所有權(quán)限。

數(shù)據(jù)庫級權(quán)限用一個ON db_name.*子句而不是ON *.*進行授權(quán):

mysql>GRANT ALL ON sample.* TO  IDENTIFIED BY "ruby"

這些權(quán)限不是全局的,所以它們不存儲在user表中,我們?nèi)匀恍枰趗ser表中創(chuàng)建一條記錄(使得用戶能連接),但我們也需要創(chuàng)建一個db表記錄記錄數(shù)據(jù)庫集的權(quán)限。

直接修改授權(quán)表創(chuàng)建用戶并授權(quán)

如果你還記得前面的介紹,你應(yīng)該能即使不用GRANT語句也能做GRANT做的事情。記住在你直接修改授權(quán)表時,你將通知服務(wù)器重載授權(quán)表,否則他不知道你的改變。你可以執(zhí)行一個mysqladmin flush-privileges或mysqladmin reload命令和FLUSH PRIVILEGES語句強迫一個重載。如果你忘記做這個,你會疑惑為什么服務(wù)器不做你想做的事情。

下列GRANT語句創(chuàng)建一個擁有所有權(quán)的超級用戶。包括授權(quán)給別人的能力:

GRANT ALL ON *.* TO  IDENTIFIED BY "passwd" WITH GRANT OPTION

該語句將在user表中為創(chuàng)建一個記錄,打開所有權(quán)限,因為這里是超級用戶(全局)權(quán)限存儲的地方,要用INSERT語句做同樣的事情,語句是:

INSERT INTO user  VALUES("localhost","anyname",PASSWORD("passwd"),
"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y")

你可能發(fā)現(xiàn)它不工作,這要看你的MySQL版本。授權(quán)表的結(jié)構(gòu)已經(jīng)改變而且你在你的user表可能沒有14個權(quán)限列。用SHOW COLUMNS找出你的授權(quán)表包含的每個權(quán)限列,相應(yīng)地調(diào)整你的INSERT語句。下列GRANT語句也創(chuàng)建一個擁有超級用戶身份的用戶,但是只有一個單個的權(quán)限:

GRANT RELOAD ON *.* TO  IDENTIFIED BY "flushpass"

本例的INSERT語句比前一個簡單,它很容易列出列名并只指定一個權(quán)限列。所有其它列將設(shè)置為缺省的"N":

INSERT INTO user (Host,Password,Reload) VALUES("localhost","flush",PASSWORD("flushpass"),"Y")

數(shù)據(jù)庫級權(quán)限用一個ON db_name.*子句而不是ON *.*進行授權(quán):

GRANT ALL ON sample.* TO  IDENTIFIED BY "ruby"

這些權(quán)限不是全局的,所以它們不存儲在user表中,我們?nèi)匀恍枰趗ser表中創(chuàng)建一條記錄(使得用戶能連接),但我們也需要創(chuàng)建一個db表記錄記錄數(shù)據(jù)庫集權(quán)限:

mysql> INSERT INTO user (Host,User,Password)
-> VALUES("localhost","boris",PASSWORD("ruby")) ;
mysql> INSERT INTO db VALUES
-> ("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y","Y");


"N"列是為GRANT權(quán)限;對末尾的一個數(shù)據(jù)庫級具有WITH GRANT OPTION的GRANT語句,你要設(shè)置該列為"Y"。

要設(shè)置表級或列級權(quán)限,你對tables_priv或columns_priv使用INSERT語句。當(dāng)然,如果你沒有GRANT語句,你將沒有這些表,因為它們在MySQL中同時出現(xiàn)。如果你確實有這些表并且為了某些原因想要手工操作它們,要知道你不能用單獨的列啟用權(quán)限。

你設(shè)置tables_priv.Table_priv或columns_priv.Column_priv列來設(shè)置包含你想啟用的權(quán)限值。例如,要對一個表啟用SELECT和INSERT權(quán)限,你要在相關(guān)的tables_priv的記錄中設(shè)置Table_priv為"Select,Insert"。</P

關(guān)于MySQL中怎么設(shè)置用戶授權(quán)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

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

AI