Sql-Server

使用者無法跨數據庫查詢,儘管擁有兩個數據庫的權限

  • September 23, 2020

SQL Server 2017 企業版 (14.0.3356.20),在 Windows Server 2016 上執行。

我有一種情況,應用程序的使用者需要在同一實例中加入單獨數據庫中的表,但是當我嘗試跨數據庫執行任何內容時出現權限錯誤。基本上,歸結為這很好用:

use DB2
EXECUTE AS user = 'domain\appUser'
SELECT TOP 1 * FROM dbo.Table
REVERT

但這不會:

use DB1
EXECUTE AS user = 'domain\appUser'
SELECT TOP 1 * FROM DB2.dbo.Table
REVERT

我在第二個查詢中收到以下錯誤:

Msg 916, Level 14, State 1, Line 3
The server principal "domain\appUser" is not able to access the database "DB2" under the current security context.

使用者被映射到兩個數據庫。在我們的其他應用程序的其他地方有很多地方我們使用了這種相同類型的跨數據庫連接,並且它們執行良好。以我的管理員使用者身份登錄,這當然也可以正常工作。誠然,我對 SQL Server 中的權限知之甚少,而這一點讓我很困惑。

這是您的測試方法的產物。你冒充了一個使用者。使用者是數據庫級別的主體。

而是模擬登錄,或使用實際連接到 SQL Server 的目標身份進行測試。

我認為您為跨數據庫查詢啟用了 TrsutWorthy ON。請通過以下部落格。它解釋了利弊。

https://www.sqlservercentral.com/blogs/what-is-the-sql-server-trustworthy-database-property

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