1つのサーバーにさまざまなプロジェクトのデータベースがあります。すべての開発者にデータベースへの管理(sysadmin
)アクセスを許可することはできません。データベースの作成と復元に必要な権限が必要です。 dbcreator
サーバーの役割は、そのために非常にうまく機能します。つまり、バックアップを復元するユーザーにはdbcreator
がありますが、sysadmin
はありません。
残念ながら、復元されたバックアップのほとんどは、復元されたサーバーと同じサーバーからのものではないため、バックアップを復元したユーザーは、復元したばかりのデータベースにすぐにアクセスできなくなります。
バックアップからデータベースを復元したユーザーが自動的にdbowner
データベースロールに追加されるように、データベースを復元するにはどうすればよいですか?それを可能にするためにSQL Serverでどのような変更が必要ですか?
更新:INSERTのトリガーを[dbo].[restorehistory]
に追加しようとしましたが、sp_addrolemember
を使用してロールを追加するには、use [database]
が機能する必要があり、このステートメントはトリガーでは無効です。また、restorehistory
のトリガーは、データベースのインポート後にまったく起動しないことも読みました(これはシステムテーブルであるため)。
次の方法で問題を回避できます。
したがって、開発者は、dbcreator権限がなくても、バックアップファイルを共有フォルダーに配置して復元する必要があります。
興味がある場合は、データベースを復元する(たとえば、必要に応じてパスを変更する)ためのPowerShellスクリプトの例を提供できます。
ソースがかなり標準的である場合は、そのロールのみが実行できるストアドプロシージャを作成して、復元ファイル、新しいデータベース名、およびユーザーIDを引数として取ることができます。 1つSP DBを復元してから、権限の変更を行います。
この設定で、ユーザーにdbcreatorロールを与えるのをやめて、SP assysadminとして実行するだけです。特権ユーザーにSP(SP $ ===(または、そのSPを含む役割/スキーマ)をサニティチェックして、引数を囲みます。
すでにPowerShellを使用しているので、復元のロジックがわかります。そのほとんどをSQLに移動し、PowerShellスクリプトに引数を収集させてから、SPを呼び出します。