13

SQL Server 2008 R2 でデータベースを構築し、Visual Studio 2010 Ultimate を使用してそのデータベース プロジェクトを作成しています。

このMSDN ウォークスルーに基づいて、自分の環境を表す SQL Server プロジェクトとデータベース プロジェクトの両方を作成しました。両方のプロジェクトのスキーマ比較は期待どおりに機能し、すべての変更サーバーをプロジェクトに複製できます。

ただし、ログイン、ユーザー/ログイン マッピング、ローカル サービス アカウント (NT SERVICE\MSSQL$SQLEXPRESS2008 など) など、環境固有の構成がインポートされているようです。別のサーバーに移行すると、それらの環境固有の詳細が異なる可能性があります。たとえば、名前付きインスタンスは、Dev、QA、および Prod の間で異なる場合があります。ユーザーは、異なるログインにマップできます。

これを適切に行っていますか?それとも、データベース プロジェクトをすべての環境に移植できるようにするために追加の手順を実行する必要がありますか?

私の目標は、このプロジェクトを利用して

  1. バージョン管理でスキーマをキャプチャ
  2. 変更スクリプトを生成するなどして、スキーマの変更をデプロイする
  3. 単体テストに結び付けて、その場で使い捨てのテスト環境を作成します。
4

1 に答える 1

10

以前にこれをいじる必要があり、環境/構成の名前を含む変数に基づいてアクセス許可を処理するために、デプロイ後のスクリプトを作成するという Jamie Thompson のアイデアを使用することになりました。(アーカイブされた) 記事はこちらにあります 。 Visual Studio 2010.aspx でデータベース開発ツールを使用して、さまざまな環境のセキュリティを管理する

注: Jamie のリンクは明らかに死んでいます。ここに基づいて何かを書きました: http://schottsql.com/2013/05/14/ssdt-setting-different-permissions-per-environment/

権限のスクリプトを処理するスクリプトも作成しました。

SELECT
state_desc + ' ' + permission_name +
' on ['+ ss.name + '].[' + so.name + ']
to [' + sdpr.name + ']'
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL]
FROM SYS.DATABASE_PERMISSIONS AS sdp
JOIN sys.objects AS so
     ON sdp.major_id = so.OBJECT_ID
JOIN SYS.SCHEMAS AS ss
     ON so.SCHEMA_ID = ss.SCHEMA_ID
JOIN SYS.DATABASE_PRINCIPALS AS sdpr
     ON sdp.grantee_principal_id = sdpr.principal_id

UNION

SELECT
state_desc + ' ' + permission_name +
' on Schema::['+ ss.name + ']
to [' + sdpr.name + ']'
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL]
FROM SYS.DATABASE_PERMISSIONS AS sdp
JOIN SYS.SCHEMAS AS ss
     ON sdp.major_id = ss.SCHEMA_ID
     AND sdp.class_desc = 'Schema'
JOIN SYS.DATABASE_PRINCIPALS AS sdpr
     ON sdp.grantee_principal_id = sdpr.principal_id
order by [Permissions T-SQL]
GO

一緒に、環境に基づいてユーザー/ロール/権限を再作成するデプロイ後のスクリプトとフォルダーに権限を設定します。メインのデプロイ後のセクションから「ラッパー」スクリプトを呼び出し、残りの部分を通過して実行するセクションを決定します。

于 2013-05-08T16:38:18.927 に答える