私はそのユーザーの呼び出しプロシージャが必要です。ユーザーがsysadminサーバー役割を持っていない場合、それはエラーより高い権限を持つSQL Serverの手順
は元本 「copy_user」は存在しないため、元本のこのタイプは が偽装、またはあなたが行うことはできませんサーバープリンシパルとして実行できません発生するという問題、許可を得ていない。
私はユーザーのsysadminサーバーの役割をすべて与えてもらえますか?
declare @ret int
exec @ret = testProc @id = 0
select @ret
と手順それが/他のデータベースにデータをコピーするので、システム管理者とユーザーログインを持つことは非常にOKでないだろうべきで
ALTER PROCEDURE testProc
@id int
AS
BEGIN
declare @c int
exec as login = 'copy_user'
select @c = COUNT(*) from Customers
REVERT
return @c;
END
GO
非常に簡単です。
私はまたしてcopy_userを偽装:私は(同じサーバー上の)他のデータベースにデータを挿入するが、現在のユーザーがアクセスすることを許可することはできません手順を必要とする
一般にGRANT IMPERSONATE ON LOGIN::copy_user TO copy_user WITH GRANT OPTION
GRANT ALTER ANY LOGIN TO copy_user
GRANT IMPERSONATE ON USER::copy_user TO copy_user WITH GRANT OPTION
GRANT ALTER ANY USER TO copy_user
GRANT SELECT, INSERT, UPDATE, DELETE TO copy_user WITH GRANT OPTION
GRANT IMPERSONATE ON USER::cp TO copy_user
。
ユーザーは、テーブルからデータにアクセスしたり、プロシージャを実行したりすることができます。必要なのは、いくつかのプロシージャのスイッチ実行コンテキストを異なるデータベースにアクセスしてそこに書き込むことができるようにすることです。現在のコンテキストは、sysadminサーバーの役割を持つユーザーに対してのみ切り替えることができ、すべてのユーザーに対して実際には行いたくありません。 – Dainius
なぜ実行コンテキストを切り替える必要がありますか?問題のデータベースユーザーが両方のデータベースに存在しないのですか? Cross Database Ownership Chainingを有効にしましたか? –
私は1つのデータベースにのみユーザーを持ちたいが、彼に2番目のデータベースに接続することを許可しない。その理由は、両方のユーザーが使用する共通のデータを1つのデータベースに持つ2つの企業が存在し、1つのテーブルデータから各企業ごとに別々のデータベースに移動する必要があるという理由があります。ですから、データを書き込むためにすべてのデータベースにユーザーを作成すると、他の会社のデータベースに接続できます(変更する可能性があります)。これを避けたいと思います。 – Dainius