1

我试图弄清楚为什么我的存储过程无法从另一个数据库的列中进行选择。

数据库 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 值得信赖。

这显然是一个权限问题,但是在保持权限尽可能严格的同时我还应该做什么呢?

4

1 回答 1

1

我通过将选择查询合并到 Ydb 内的视图中并使用以下查询在 Kdb 上启用来宾帐户成功地解决了这个问题:

USE [Kdb];
GO
GRANT CONNECT TO guest;
于 2012-07-20T18:01:41.250 回答