溫馨提示×

溫馨提示×

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

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

MySQL show fileds from 提示無權(quán)限的示例分析

發(fā)布時(shí)間:2021-10-25 15:39:48 來源:億速云 閱讀:146 作者:柒染 欄目:MySQL數(shù)據(jù)庫

MySQL show fileds from 提示無權(quán)限的示例分析,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。


背景:
MySQL-5.7.12, 開發(fā)用的環(huán)境出現(xiàn)show fields的報(bào)錯(cuò);

場景:
業(yè)務(wù)方反饋在執(zhí)行show fields的命令時(shí)報(bào)錯(cuò)了,
在測試環(huán)境構(gòu)造了報(bào)錯(cuò)的場景, 實(shí)際報(bào)錯(cuò)內(nèi)容類似于:

點(diǎn)擊(此處)折疊或打開

  1. ERROR 1143 (42000): SELECT command denied to user ''@'%' for column 'role_id' in table 'xxxxx'


直觀上看, 很容易就能發(fā)現(xiàn)是權(quán)限的問題,
不過有一個(gè)疑點(diǎn):
報(bào)錯(cuò)內(nèi)容的用戶那一欄顯示為空;

分析:
首先能肯定的是這是由權(quán)限引起的, 錯(cuò)誤信息中很明顯;
第二點(diǎn)就是用戶欄顯示為空, 這個(gè)有可能是指用戶不存在, 也有可能是有關(guān)聯(lián)的用戶信息存在一些問題,導(dǎo)致無法顯示;

排查:
1.排查登錄用戶的權(quán)限, 登錄到線上環(huán)境, 發(fā)現(xiàn)業(yè)務(wù)賬號確實(shí)會報(bào)錯(cuò), 然后換成root賬號也是一樣......
MySQL show fileds from 提示無權(quán)限的示例分析
而業(yè)務(wù)賬號是有view對應(yīng)db, 以及view 的select中對應(yīng)db的ALL權(quán)限的, 何況root也不行, 說明這個(gè)權(quán)限相關(guān)的報(bào)錯(cuò), 并不是由登錄用戶引起的;

2.既然不是登錄用戶的權(quán)限問題, 那么就看看視圖本身的權(quán)限;

------------------------------------------------------------------------------------------------------------------------------------------------------------------
相關(guān)資料:
MySQL-5.7中, 視圖的權(quán)限控制是由視圖創(chuàng)建時(shí)自行指定的, 如測試環(huán)境中, 有問題的視圖的創(chuàng)建語句:

點(diǎn)擊(此處)折疊或打開

  1. CREATE ALGORITHM=UNDEFINED DEFINER=`test`@`%` SQL SECURITY DEFINER VIEW test_view_xxx_roles AS select xxx;

紅色部分:
定義了這個(gè)view的創(chuàng)建者(定義者), 代表了這個(gè)view在創(chuàng)建時(shí)用到的權(quán)限是`test`@`%`提供的;

綠色部分:
定義了這個(gè)view在訪問的時(shí)候, 校驗(yàn)權(quán)限時(shí), 檢查哪個(gè)用戶, DEFINER或者是INVOKER;

------------------------------------------------------------------------------------------------------------------------------------------------------------------

從相關(guān)資料可以了解到, show fields from view_stack會報(bào)無權(quán)限的錯(cuò)誤, 就是因?yàn)楦鶕?jù)SQL SECURITY去校驗(yàn)用戶的權(quán)限時(shí), 發(fā)現(xiàn)權(quán)限沒了;
從view的內(nèi)容來看, 只需要對應(yīng)庫的select權(quán)限就好了, 那么看看現(xiàn)在庫中, 創(chuàng)建這個(gè)view的test用戶的權(quán)限:
MySQL show fileds from 提示無權(quán)限的示例分析

是的, 真的沒有看錯(cuò), 開發(fā)用的環(huán)境里面, 這個(gè)view對應(yīng)的用戶已經(jīng)沒了....._(:з」∠)_

那么創(chuàng)建這個(gè)用戶以后, 看看是不是就不會報(bào)錯(cuò)了:
MySQL show fileds from 提示無權(quán)限的示例分析

果然, 只要加上這個(gè)definer就不會再報(bào)錯(cuò)了;

處理方式:
最終的處理方式是修改了相關(guān)view的definer用戶(需要super權(quán)限才能修改view的這個(gè)字段);


重要的額外信息:
比較奇怪的是這個(gè)現(xiàn)象無法在"干凈
"的庫里面復(fù)現(xiàn), 只有把開發(fā)環(huán)境的數(shù)據(jù)庫導(dǎo)入到測試環(huán)境才會出現(xiàn)這個(gè)問題, 可能有一些其他的因素影響到了mysql的處理邏輯;

關(guān)于MySQL show fileds from 提示無權(quán)限的示例分析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

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

AI