我正在试图弄清楚为什么我的存储过程无法从另一个数据库的列中进行选择。
数据库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值得信赖。
这显然是一个权限问题,但在保持权限尽可能严格的同时我还应该做些什么呢?
答案 0 :(得分:1)
我通过将select查询合并到Ydb中的视图并使用以下查询在Kdb上启用来宾帐户来成功解决了此问题:
USE [Kdb];
GO
GRANT CONNECT TO guest;