私は次のセットアップ持っている:問題は、「AS EXECUTE」
SQL ServerのDBがそれらに設定されたトリガを(履歴データを収集することを)持っているいくつかのテーブルにあります。これらのトリガーは、EXECUTE AS 'HistoryUser'
のCLRストアドプロシージャです。 HistoryUser
ユーザーは、ログインせずにデータベース内のシンプルなユーザーです。すべてのテーブルから読み取り、履歴テーブルに書き込むための十分な権限を持っています。
DBをバックアップして別のマシン(この場合は仮想マシンですが、問題ではありません)に復元すると、トリガーはもう機能しません。実際には、ユーザーの偽装はこれ以上行われません。そのようなこの
exec ('select 3') as user='HistoryUser'
などであっても、簡単な文がエラーを生成します。
Cannot execute as the database principal because the principal "HistoryUser" does not exist, this type of principal cannot be impersonated, or you do not have permission.
私は、DBの所有者がドメインユーザーであれば、これが発生する可能性があることread in MSDNが、そうではありません。そして、たとえそれを他のもの(彼らの推奨される解決策)に変更しても、この問題は残っています。
ログインせずに別のユーザーを作成した場合は、偽装に使用できます。つまり、これはうまく動作します:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
私はすべてのそれらのトリガーを再作成する必要はありませんので、私は既存のHistoryUser
作業を行うことができますどのようにどのような方法はありますか?
バンプ:申し訳ありませんが、これはちょっと急務となっている...
Nopに、助けにはなりません。 –