日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

《MySQL排错指南》——1.9 许可问题

發(fā)布時(shí)間:2023/12/19 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MySQL排错指南》——1.9 许可问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本節(jié)書(shū)摘來(lái)自異步社區(qū)出版社《MySQL排錯(cuò)指南》一書(shū)中的第1章,第1.9節(jié),作者:【美】Sveta Smirnova(斯維特 斯米爾諾娃),更多章節(jié)內(nèi)容可以訪(fǎng)問(wèn)云棲社區(qū)“異步社區(qū)”公眾號(hào)查看。

1.9 許可問(wèn)題

MySQL有復(fù)雜的權(quán)限方案,這使得你可以精確地設(shè)置哪些用戶(hù)和主機(jī)可以或不可以執(zhí)行這個(gè)或那個(gè)操作。從5.5版本開(kāi)始,MySQL也有了可插拔式的身份驗(yàn)證模式。

盡管它有很多優(yōu)勢(shì),但是這個(gè)方案很復(fù)雜。例如,讓user1@hostA、user2@hostA和user1@hostB不同會(huì)很容易混淆它們的權(quán)限。當(dāng)用戶(hù)名相同而主機(jī)名變化的時(shí)候更是如此。

MySQL允許在對(duì)象和連接層面設(shè)置訪(fǎng)問(wèn)規(guī)則。可以限制某個(gè)用戶(hù)對(duì)于特定的表、列等的訪(fǎng)問(wèn)權(quán)限。

用戶(hù)通常會(huì)遇到兩類(lèi)權(quán)限問(wèn)題:

應(yīng)該有權(quán)限連接到服務(wù)器的用戶(hù)無(wú)法連接,或者沒(méi)有權(quán)限的用戶(hù)可以連接;
用戶(hù)可以連接到服務(wù)器,但是無(wú)法使用他們本應(yīng)該可以訪(fǎng)問(wèn)的對(duì)象,或者可以訪(fǎng)問(wèn)他們無(wú)權(quán)訪(fǎng)問(wèn)的對(duì)象。
在解決這些問(wèn)題之前,應(yīng)該確認(rèn)你是否可以連接到服務(wù)器。

當(dāng)你作為解決問(wèn)題的用戶(hù)成功連接到服務(wù)器之后(后面的章節(jié)將討論無(wú)法連接的情況),執(zhí)行以下查詢(xún):

USER()函數(shù)會(huì)返回當(dāng)用戶(hù)連接到服務(wù)器時(shí)使用的連接參數(shù)。這些參數(shù)通常為指定的用戶(hù)名和運(yùn)行客戶(hù)端的主機(jī)名。CURRENT_USER()函數(shù)會(huì)返回從權(quán)限表中選擇的與訪(fǎng)問(wèn)權(quán)限相關(guān)的用戶(hù)名和主機(jī)名對(duì)。mysqld用這些用戶(hù)名和主機(jī)名對(duì)來(lái)檢查數(shù)據(jù)庫(kù)對(duì)象訪(fǎng)問(wèn)權(quán)限。通過(guò)比較這些函數(shù)的結(jié)果,可以找到mysqld使用的權(quán)限和預(yù)期不同的原因。一個(gè)典型的問(wèn)題是對(duì)主機(jī)名使用通配符%:

如果此時(shí)我以sveta身份連接并嘗試創(chuàng)建一個(gè)表,我就會(huì)獲得下面的錯(cuò)誤:

該問(wèn)題在于,MySQL服務(wù)器認(rèn)為sveta是sveta@localhost,而不是通配符:

 

如果你不理解為什么選擇一臺(tái)或另一臺(tái)主機(jī),可以進(jìn)行如下查詢(xún):

MySQL在表中按照從訪(fǎng)問(wèn)最多的主機(jī)到訪(fǎng)問(wèn)最少的主機(jī)的順序?qū)π羞M(jìn)行排序,然后使用第一個(gè)找到的值。因此,它把我當(dāng)作sveta@localhost用戶(hù)進(jìn)行連接,此時(shí)該用戶(hù)沒(méi)有CREATE權(quán)限。

USER()、CURRENT_USER()函數(shù)和“SELECT user, host FROM mysql.user ORDER BY host DESE”查詢(xún)語(yǔ)句是遇到權(quán)限問(wèn)題時(shí)的首選。
另一種權(quán)限問(wèn)題是你無(wú)法作為指定用戶(hù)進(jìn)行連接。在這種情況下,通常可以從錯(cuò)誤消息中了解問(wèn)題產(chǎn)生的原因,錯(cuò)誤消息一般如下所示:

在看到這條消息以后,你了解了用戶(hù)憑證。作為root超級(jí)用戶(hù)進(jìn)行連接,然后檢查該用戶(hù)是否存在以及是否擁有所需權(quán)限:

在這個(gè)輸出信息中,你可以看到用戶(hù)'sveta'@'localhost'僅僅對(duì)book數(shù)據(jù)庫(kù)有權(quán)限,而對(duì)books數(shù)據(jù)庫(kù)沒(méi)有權(quán)限。現(xiàn)在,可以修復(fù)這個(gè)錯(cuò)誤:賦予sveta@localhost用戶(hù)必要的權(quán)限。

前面的示例討論用戶(hù)缺失必要權(quán)限的情況。對(duì)于用戶(hù)被授予過(guò)多權(quán)限的情況也可以同樣處理;僅需要移除不必要的權(quán)限。

警告 警告

MySQL的權(quán)限與其管控對(duì)象是分離的:這意味著當(dāng)你賦予某用戶(hù)權(quán)限時(shí)mysqld 不會(huì)檢查其是否存在,同時(shí)當(dāng)授權(quán)對(duì)象被刪除時(shí)也不會(huì)移除相應(yīng)權(quán)限。這樣做的好處是允許我們預(yù)先授予必要的權(quán)限,但同時(shí)也有可能在不經(jīng)意的使用中帶來(lái)潛在的問(wèn)題。
作為最佳實(shí)踐,我推薦你仔細(xì)學(xué)習(xí)MySQL的權(quán)限工作機(jī)制。尤其是在你想要在用戶(hù)對(duì)象級(jí)別授予權(quán)限的時(shí)候,因?yàn)槟阈枰斫庠谝粋€(gè)級(jí)別授權(quán)是如何影響其他授權(quán)的。同樣,對(duì)于撤消權(quán)限情形也一樣重要,甚至更重要,因?yàn)槿绻阋詾橐呀?jīng)撤消了某個(gè)權(quán)限但它依然存在,這就會(huì)造成意外的訪(fǎng)問(wèn)。

[1] 版本5.6.3開(kāi)始,也可以在UPDATE和DELETE上使用EXPLAIN方法,不過(guò)把語(yǔ)句轉(zhuǎn)換成SELECT查詢(xún)?nèi)匀挥行?#xff0c;因?yàn)槟憧梢苑奖愕貦z查和操作實(shí)際的結(jié)果集,而不是僅使用EXPLAIN命令。這尤其適用于復(fù)雜的JOIN操作,尤其是當(dāng)EXPLAIN輸出的檢查的行比實(shí)際更新的行還要多的時(shí)候。

[2] 你可以在http://dev.mysql.com/doc/refman/5.5/en/c.html找到關(guān)于C API的詳細(xì)描述。

[3] 第5章將詳細(xì)介紹如何解決復(fù)制失敗的問(wèn)題,因此這里不再詳細(xì)解釋。

[4] MySQL企業(yè)級(jí)備份(MEB)以前也稱(chēng)作InnoDB熱備份,是InnoDB表進(jìn)行在線(xiàn)熱備份和其他存儲(chǔ)引擎的表進(jìn)行在線(xiàn)備份的一個(gè)工具。第7章將討論備份的方法。

本文僅用于學(xué)習(xí)和交流目的,不代表異步社區(qū)觀(guān)點(diǎn)。非商業(yè)轉(zhuǎn)載請(qǐng)注明作譯者、出處,并保留本文的原始鏈接。

總結(jié)

以上是生活随笔為你收集整理的《MySQL排错指南》——1.9 许可问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。