1

別のデータベースの列から選択するためにストアドプロシージャが機能しない理由を理解しようとしています。

データベース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を信頼できるものにしました。

これは明らかにアクセス許可の問題ですが、アクセス許可を可能な限り厳しく保ちながら、他に何をすべきでしょうか。

4

1 に答える 1

1

選択クエリを Ydb 内のビューに組み込み、次のクエリを使用して Kdb でゲスト アカウントを有効にすることで、この問題を正常に解決しました。

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