web-dev-qa-db-ja.com

sysadminロールなしで復元されたデータベースへのMSSQLアクセス

1つのサーバーにさまざまなプロジェクトのデータベースがあります。すべての開発者にデータベースへの管理(sysadmin)アクセスを許可することはできません。データベースの作成と復元に必要な権限が必要です。 dbcreatorサーバーの役割は、そのために非常にうまく機能します。つまり、バックアップを復元するユーザーにはdbcreatorがありますが、sysadminはありません。

残念ながら、復元されたバックアップのほとんどは、復元されたサーバーと同じサーバーからのものではないため、バックアップを復元したユーザーは、復元したばかりのデータベースにすぐにアクセスできなくなります。

バックアップからデータベースを復元したユーザーが自動的にdbownerデータベースロールに追加されるように、データベースを復元するにはどうすればよいですか?それを可能にするためにSQL Serverでどのような変更が必要ですか?

更新:INSERTのトリガーを[dbo].[restorehistory]に追加しようとしましたが、sp_addrolememberを使用してロールを追加するには、use [database]が機能する必要があり、このステートメントはトリガーでは無効です。また、restorehistoryのトリガーは、データベースのインポート後にまったく起動しないことも読みました(これはシステムテーブルであるため)。

4
Hubert Kario

次の方法で問題を回避できます。

  • SQLバックアップをホストするフォルダーを作成します
  • PowerShellのようなスクリプトを作成して、フォルダー内にバックアップが見つかったときにデータベースに自動的に復元し、セキュリティを適用してから、バックアップをアーカイブフォルダーに移動します。次に、たとえば完了したらメールを送信します。
  • 毎分と同じように実行されるスケジュールされたタスクを作成します。

したがって、開発者は、dbcreator権限がなくても、バックアップファイルを共有フォルダーに配置して復元する必要があります。

興味がある場合は、データベースを復元する(たとえば、必要に応じてパスを変更する)ためのPowerShellスクリプトの例を提供できます。

2
Mathieu Chateau

ソースがかなり標準的である場合は、そのロールのみが実行できるストアドプロシージャを作成して、復元ファイル、新しいデータベース名、およびユーザーIDを引数として取ることができます。 1つSP DBを復元してから、権限の変更を行います。

この設定で、ユーザーにdbcreatorロールを与えるのをやめて、SP assysadminとして実行するだけです。特権ユーザーにSP(SP $ ===(または、そのSPを含む役割/スキーマ)をサニティチェックして、引数を囲みます。

すでにPowerShellを使用しているので、復元のロジックがわかります。そのほとんどをSQLに移動し、PowerShellスクリプトに引数を収集させてから、SPを呼び出します。

0
Mark