3

「データ層アプリケーションの展開...」オプションを使用して SQL Server に SQL データベースを展開するための DACPAC ファイルを作成する Visual Studio 2013 SQL データベース プロジェクトは、SQL Server Management Studio (SSMS) です。

プロジェクトの一部として、必要なユーザーを作成する SQL スクリプトを含むSecurityフォルダーがあります。スクリプトは次のとおりです。

CREATE LOGIN [MyLogin]
    WITH PASSWORD = N'MyPassword',
    DEFAULT_DATABASE = [MyDatabase],
    DEFAULT_LANGUAGE = [us_english],
    CHECK_EXPIRATION = OFF,
    CHECK_POLICY = OFF
GO

CREATE USER [MyLogin] FOR LOGIN [MyLogin] WITH DEFAULT_SCHEMA=[dbo];
GO

exec sp_addrolemember 'db_datareader', N'MyLogin'
GO

GRANT EXECUTE ON OBJECT::[dbo].[MyObject1] TO [MyLogin];
GO

GRANT EXECUTE ON OBJECT::[dbo].[MyObject2] TO [MyLogin];
GO

GRANT EXECUTE ON OBJECT::[dbo].[MyObject3] TO [MyLogin];
GO

DACPAC を SQL Server に発行すると、データベースを使用するアプリケーションはログオンできません。SSMS でユーザー プロパティを表示すると、データベース ユーザーと SQL Server ログイン プリンシパルの間に関連付けがないことがわかります。これにより、アプリケーションがログインできなくなる可能性があります。

ただし、SSMS で上記のスクリプトを逐語的に手動で実行すると、ユーザーが正しく作成され、アプリケーションは正常にログインできます。

DACPAC で作成されたユーザーのデータベース マッピングが正しく設定されていないのはなぜですか。また、すべてを意図したとおりに機能させるには、スクリプトや DACPAC プロパティで何をする必要がありますか。

ありがとう、マーティン

4

1 に答える 1

5

結局、私は同僚の助けを借りてこの問題の真相にたどり着きました。欠落している部分は、CREATE USER ...ステートメントの後の次の 2 行でした。

GRANT CONNECT TO [MyLogin];
GO

これで、DACPAC は SQL データベースを正しくデプロイし、アプリケーションは作成されたMyLoginユーザーを使用してデータベースに接続できるようになりました。

于 2014-10-06T08:50:00.793 に答える