Sql-Server-2005

繼承的權限:SQL Server 2005 與 2016

  • June 27, 2018

問題:

  • 我有一個 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 數據庫打開更精細的數據庫選項。

如果您在上述操作後仍有問題,請發布實際的錯誤消息。

引用自:https://dba.stackexchange.com/questions/210698