最初に少し紹介します。
SQL Server Express 2008データベースがあります。このスキーマは、スクリプトの形式でソースコントロールに保持されます。元々は、Management Studioでデータベースのコンテキストメニューを開き、[タスク]、[スクリプトの生成...]の順に選択して作成されます。
各開発者にはローカルのSQLServerExpress 2008データベースがあり、CIサーバーによって使用される中央のSQLServer2008データベースが1つあります。開発者がローカルデータベースのスキーマを変更するたびに、スクリプトを再生成し、ソースコードとともにコミットして、CIサーバーが使用する中央データベースのスキーマを更新します。
場合によっては、変更が膨大で、データベース全体を削除し、スクリプトを使用してデータベースを最初から作成する方が簡単な場合があります。これは非常に簡単です。
しかし、1つの問題があります。スクリプトは適切なデータベースユーザー(たとえばServerUserdb_owner
)を作成しますが、そのユーザーにアプリケーションに必要なロールメンバーシップを付与しません。開発者は、Management StudioのServerUserユーザーでプロパティダイアログを開き、データベースロールメンバーシップリストのdb_owner
チェックボックスをオンにすることを忘れないでください。言うまでもなく、私たちはこのステップを頻繁に忘れます。私自身、サーバーが起動しない理由を理解しようとして、約1時間無駄になりました。
[master].[sys].[database_role_members]
ややナイーブな人間なので、単純なsql insertステートメントでカタログを操作して、スクリプト実行の一部として必要なロールメンバーシップを自動的に追加できると思いました。もちろん、それはエラーメッセージで失敗しました。システムカタログへのアドホックアップデートは許可されていません。。愚かな私。
とにかく、私の質問はこれです。データベースとServerUserの作成時にSQLスクリプトを実行して、このユーザーdb_owner
に新しいデータベースのロールメンバーシップを持たせることはできますか?
ありがとう。