データベースの復元後にユーザーの役割を確認するために、dbo.restorehistoryテーブルにトリガーを設定しようとしています。リストアが履歴テーブルにログを記録するときに、トリガーは単に「destination_database_name」を照会します。次に、問題のデータベースで「EXECsp_addrolemember」を実行しようとします。ただし、明らかに、このプロシージャはデータベースのスコープ外には存在しません。つまり、トリガー内では使用できません。
それで、誰かがこのタスクを管理する方法について提案がありますか?私の方法が機能しないという明らかな事実は別として、完全にもっと良い方法があるかもしれません。
簡単に言うと、復元後にユーザーを追加してdb_ownerに設定できるようにする必要があります。
これらの復元の問題は、制御できないサードパーティのアプリケーションからリモートで実行されることです。新しいデータベースを作成すると、復元を実行してデータベースにデフォルトデータを入力し、モデルデータベースで指定されている場合でも、特別に設定したユーザーロールを上書きします。それで...
- サードパーティのプログラムがデータベースを作成します
- データベースはモデルデータベースからユーザーを継承します
- サードパーティのプログラムは、デフォルトのデータベースを復元することでユーザーを上書きします
- それらのユーザーを再作成して、役割を適用する必要があります
ANSI_NULLSをオンに設定
行く
QUOTED_IDENTIFIERをオンに設定
行く
-=============================================
CREATETRIGGER[dbo]。[AfterRestore]
オン[msdb]。[dbo]。[restorehistory]
挿入後
なので
始める
NOCOUNTをオンに設定します。
DECLARE @DatabaseName AS VARCHAR(100)
SELECT @DatabaseName = destination_database_name
挿入から
ログイン[ドメイン\xyzzyusers]のユーザー[XYZZYユーザー]を作成します
EXEC sp_addrolemember'db_owner'、'XYZZYユーザー'
終わり
行く