我有一个 Visual Studio 2013 SQL 数据库项目,它创建了一个 DACPAC 文件,用于使用“部署数据层应用程序...”选项将 SQL 数据库部署到 SQL Server 是 SQL Server Management Studio (SSMS)。
作为项目的一部分,有一个安全文件夹,其中包含创建所需用户的 SQL 脚本。脚本是:
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 属性中执行什么操作才能使一切按预期工作。
谢谢,马丁