データベースの復元後にユーザーの役割を確認するために、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ユーザー' 終わり 行く