2012-03-30 10 views
1

私はVS2010にSQL 2005データベースプロジェクトを持っています。私は作成され、データベースへのアクセス許可を与えられたユーザーを持っています。データベースプロジェクト展開時のアクセス許可を破棄

Test.user.sql

CREATE USER [$(MachineName)\Test] FOR LOGIN [$(MachineName)\Test] WITH DEFAULT_SCHEMA = dbo; 
GO 
EXEC sp_addrolemember N'db_datawriter', N'$(MachineName)\Test' 
GO 
EXEC sp_addrolemember N'db_datareader', N'$(MachineName)\Test' 
GO 

Iは、選択された構成(デバッグ(DEV)、QA、UAT、生産)に応じて、マシンの名前を保持$(MachineName)ために定義されたSQLCMDVARを有します。この変数は、生成されたSQLの一番上に正しく設定されている:私はこのプロジェクトを展開するとき

:setvar MachineName "TheMachineName" 

、上記のスクリプトで作成されたユーザーは削除され、その後、再作成し、ユーザーの権限が取り消されています。デプロイメント中に、このユーザーおよびその権限に関する生成内容は、データベース内のユーザーの状態によって異なります。

ユーザーがdatareaderdatawriterのアクセス許可を持つ場合、これらのアクセス許可は取り消され、ユーザーは削除され、ユーザーは再作成され、アクセス許可は適用されません。

PRINT N'Creating <unnamed>...'; 
GO 
EXECUTE sp_addrolemember @rolename = N'db_datareader', @membername = N'$(MachineName)\Test'; 
GO 
PRINT N'Creating <unnamed>...'; 
GO 
EXECUTE sp_addrolemember @rolename = N'db_datawriter', @membername = N'$(MachineName)\Test'; 
GO 

私が把握することはできません:私は再度プロジェクトを展開する場合

PRINT N'Altering <unnamed>...'; 
GO 
PRINT N'No script could be generated for operation 2 on object ''<unnamed>''.'; 
GO 
PRINT N'Altering <unnamed>...'; 
GO 
PRINT N'No script could be generated for operation 2 on object ''<unnamed>''.'; 
GO 

は、パーミッションが正しく生成され、ユーザに適用されます:Visual Studioはsp_addrolememberコマンドがあるべきこの行を追加しますなぜこれが起きているのですか?

+0

私はちょうど同様の問題を抱えています。つまり、VSからの直接の配備によってすべてのユーザーのアクセス許可が取り消されました。 – Alex

+0

@Alex、それは本当にイライラしています。そして、どんな入力があるように見えません! –

答えて

1

これはVisual Studioの既知のバグです。 vsts 2010 database deployment errorおよびvsts 2010 database deployment errorを参照してください。これはMicrosoft SQL Server Data Toolsに修正される可能性があることが示されています。 SSDTはVistaを必要とするので、あなたがXPを使用しているなら、あなたはこれで幸運を逃します。

+0

多くのDBプロジェクトをMSSQL Server Data Toolsにアップグレードしましたが、このバグがまだ存在するかどうかはまだ確認していません。 –