Sql-Server-2005
繼承的權限:SQL Server 2005 與 2016
問題:
- 我有一個 SQL Server 2005 伺服器和一個 SQL Server 2016 伺服器。
- 每台伺服器上都有一個數據庫 (A),其中包含一個從數據庫 (A) 中的視圖中選擇數據的儲存過程
- 數據庫 (A) 中的視圖正在引用同一伺服器上的數據庫 (B) 中的表
- 我使用的登錄只對數據庫 (A) 上的儲存過程具有執行權限。
- 兩台伺服器的此設置相同。
- 在 2005 伺服器上,我可以按照描述的登錄方式執行 SP,並通過數據庫 (A) 中的視圖從數據庫 (B) 中的表中檢索數據 - 正如我所期望的那樣。
- 在 2016 伺服器上,我收到一個錯誤,因為從數據庫 (A) 我無法通過 SP 和視圖從數據庫 (B) 中的表中選擇數據。
兩台伺服器都執行 SQL Server 標準版 - (雖然一台是 2005 年,另一台是 2016 年)。
總結一下:
SQL 伺服器 2005
- 數據庫 A = 視圖 = 數據庫 B 中的表
- 數據庫 A = 儲存過程 = 從視圖中選擇
- 登錄 = 僅在儲存過程中執行
- 結果 = 成功
SQL 伺服器 2016
- 設置看起來相同
- 結果 = 失敗
為什麼是這樣?這兩個版本的 SQL 在權限繼承方面有什麼不同?我錯過了什麼非常明顯的事情嗎?
任何指針都會非常有幫助!
我不希望不同的 SQL Server 版本在這裡有所作為。儘管設置可能看起來相同,但兩台伺服器上的數據庫或伺服器配置之間可能存在細微差別。
我建議的第一件事是驗證是否滿足跨數據庫所有權連結的要求:
- 確保兩台伺服器上的“跨數據庫所有權連結”配置選項相同
- 確保
DB_CHAINING
數據庫選項相同- 檢查數據庫所有者是否相同,以維護 dbo 擁有的對象的完整所有權鏈
如果罪魁禍首是“跨數據庫所有權連結”伺服器選項,最好將其關閉,而是
DB_CHAINING
為有問題的 SQL 2016 數據庫打開更精細的數據庫選項。如果您在上述操作後仍有問題,請發布實際的錯誤消息。