別のデータベースの列から選択するためにストアドプロシージャが機能しない理由を理解しようとしています。
データベースKdbとYdbのデータベース所有者は同じです。そのデータベース所有者アカウントを使用して作成された両方のデータベースのストアドプロシージャとテーブル。
最小限の権限のユーザーによって実行されているKdbのテーブルにアクセスしようとするYdbのストアドプロシージャがあります(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を信頼できるものにしました。
これは明らかにアクセス許可の問題ですが、アクセス許可を可能な限り厳しく保ちながら、他に何をすべきでしょうか。