2012-07-19 59 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; 
相关问题