2012-07-19 58 views
1

我想弄清楚爲什麼我的存儲過程不適用於從另一個數據庫的列中選擇。服務器主體Xuser無法在當前安全上下文中訪問數據庫Ydb。 SQL服務器2008

數據庫Kdb和Ydb具有相同的數據庫所有者。使用該數據庫所有者帳戶創建的兩個數據庫中的存儲過程和表。

在Ydb中有一個存儲過程試圖訪問Kdb中的一個表,由最小權限用戶執行(只有在Ydb上執行和連接,沒有Kdb權限)。

Use [Ydb] 
GO 
ALTER PROCEDURE [dbo].[CreateSecureTableAEntry] 
@fid int 
AS 
BEGIN 
DECLARE @operatorId uniqueidentifier 
DECLARE @orgName nvarchar(max) 
SELECT @orgName = SUBSTRING(SYSTEM_USER,1,LEN(SYSTEM_USER)-4) 
SELECT @operatorId = Id FROM Kdb.dbo.Organizations WHERE Kdb.dbo.Organizations.Name = @orgName 
INSERT INTO TableA (operatorId, sourceFid) VALUES (@operatorId, @fid); 
END 

我在Kdb和Ydb上啓用了交叉數據庫鏈接。我讓YDB值得信賴。

這顯然是一個權限問題,但在保持權限盡可能緊的情況下還應該做些什麼?

回答

1

我通過將選擇查詢到裏面YDB一個視圖,使來賓帳戶上KDB用下面的查詢成功地解決了這個問題:

USE [Kdb]; 
GO 
GRANT CONNECT TO guest; 
相關問題