徵狀
假設您在 Microsoft SQL Server 2012 或 SQL Server 2014 中擁有非 dbo 架構的資料表上,有 select 許可權。 當您從 [ sys.column_store_segments ] 視圖查詢時,[ has_nulls]、[ base_id、[ 數量級]、[ min_data_id]、[ max_data_id] 和 [ null_value ] 會顯示 null 值。注意
-
[ Sys.column_store_segments ] 視圖使用下列函數執行安全性檢查:
HAS_PERMS_BY_NAME ( securable , securable_class , permission [ , sub-securable ] [ , sub-securable_class ] )
-
除非使用者擁有 select 許可權,否則欄 has_nulls、 base_id、 數量級、 min_data_id、 max_data_id和 null_value 傳回 null 值。
原因
之所以會發生此問題,是因為視圖的安全性檢查並未考慮非 dbo 架構。 因此,即使您在具有非 dbo 架構的資料表上擁有 select 許可權,您仍然可以從該視圖接收 Null 值。
解決方案
此問題最初是在 SQL Server 的後續累積更新中修正。
SQL Server 2012 SP2 累積更新2 /en-us/help/2983175
SQL Server 2012 SP1 累計更新12 /en-us/help/2991533
SQL Server 2014 累積更新3 /en-us/help/2984923
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。