W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對表pg_statistic
的訪問僅限于超級用戶, 以便普通用戶無法從中了解其他用戶的表的內(nèi)容。 一些選擇性估算函數(shù)將使用用戶提供的操作符(出現(xiàn)在查詢中的操作符或相關(guān)操作符) 來分析所存儲(chǔ)的統(tǒng)計(jì)。例如,為了確定存儲(chǔ)的最常用值是否適用, 選擇性估計(jì)器將必須運(yùn)行適當(dāng)?shù)?code class="literal">=
運(yùn)算符來將查詢中的常量與存儲(chǔ)的值進(jìn)行比較。因此, pg_statistic
中的數(shù)據(jù)可能會(huì)傳遞給用戶定義的運(yùn)算符。
適當(dāng)制作的操作符可以故意泄漏傳遞的操作數(shù)(例如,通過記錄它們或?qū)⑺鼈儗懭氩煌谋恚?或者通過在錯(cuò)誤消息中顯示它們的值來意外泄漏它們,無論哪種情況都可能暴露 pg_statistic
中的數(shù)據(jù)給一個(gè)不應(yīng)該能夠看到它的用戶。
為了防止這種情況,以下內(nèi)容適用于所有內(nèi)置的選擇性估計(jì)函數(shù)。在規(guī)劃查詢時(shí), 為了能夠使用存儲(chǔ)的統(tǒng)計(jì)信息,當(dāng)前用戶必須在表或相關(guān)列上具有 SELECT
權(quán)限,或者使用的操作符必須是 LEAKPROOF
(更準(zhǔn)確地說,是操作符所基于的函數(shù))。 如果不是,那么選擇性估計(jì)器將表現(xiàn)得好像沒有統(tǒng)計(jì)數(shù)據(jù)可用, 并且規(guī)劃器將繼續(xù)進(jìn)行默認(rèn)或回退假設(shè)。
如果用戶對表或列沒有所需的權(quán)限,那么在很多情況下,查詢最終會(huì)收到權(quán)限被拒絕的錯(cuò)誤, 在這種情況下,這種機(jī)制在實(shí)踐中是不可見的。但是,如果用戶正在從安全屏障視圖讀取數(shù)據(jù), 則規(guī)劃器可能希望檢查用戶無法訪問的基礎(chǔ)表的統(tǒng)計(jì)數(shù)據(jù)。在這種情況下, 操作符應(yīng)該是防漏的,否則統(tǒng)計(jì)數(shù)據(jù)將不會(huì)被使用。沒有直接的反饋意見, 除非計(jì)劃可能是次優(yōu)的。如果有人懷疑是這種情況, 可以嘗試將查詢作為更有特權(quán)的用戶來運(yùn)行,以查看是否產(chǎn)生了不同的計(jì)劃。
此限制僅適用于規(guī)劃器需要對pg_statistic
中的一個(gè)或多個(gè)值執(zhí)行用戶定義的運(yùn)算符的情況。因此,無論訪問權(quán)限如何, 規(guī)劃器都可以使用通用的統(tǒng)計(jì)信息,例如列中空值的比例或列中不同值的數(shù)量。
可能對用戶定義的操作符進(jìn)行統(tǒng)計(jì)操作的第三方擴(kuò)展中包含的選擇性估計(jì)函數(shù), 應(yīng)遵循相同的安全規(guī)則。請參考PostgreSQL源代碼獲取指導(dǎo)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: