Lie*_*ero 5 sql-server database-project dacpac sqlpackage sql-server-2016
我正在尝试自动化 SQL 部署,包括用户和角色。当我在 Sql Management Studio 中创建用户时它可以工作,但是当我部署 dacpack 时我得到 SqlException: Login Failed for user 'MyUser'
我在本地主机上安装了 SQL Server 2016,同时启用了 Sql Server 和 Windows 身份验证。
我在 Visual Studio 中有包含这些文件的 Sql 数据库项目:
MyUser.sql [构建操作=构建]
CREATE USER [MyUser] WITH Password='$(MyUserPassword)';
Run Code Online (Sandbox Code Playgroud)RolesMembership.sql [构建动作=构建]
ALTER ROLE [db_datareader] ADD MEMBER [MyUser]
GO
ALTER ROLE [db_datawriter] ADD MEMBER [MyUser]
Run Code Online (Sandbox Code Playgroud)我构建它并使用命令行部署创建的 dacpac:
SqlPackage.exe /Action:Publish
/SourceFile:"MyDatabase.dacpac"
/Profile:"MyDatabase.publish.xml"
/v:MyUserPassword=c2Aaaaaaaaaaaa`
Run Code Online (Sandbox Code Playgroud)当我在 sql management studio 中执行此脚本时,它会起作用。但是当我使用 SqlPackage 部署它时,它会导致
SqlException: 用户“MyUser”登录失败
编辑:
我调查了生成的 sql 脚本,其中包括REVOKE CONNECT:
CREATE USER [MyUser]
WITH PASSWORD = N'c2Aaaaaaaaaaaa';
GO
REVOKE CONNECT TO [MyUser];
EXECUTE sp_addrolemember @rolename = N'db_datareader', @membername = N'MyUser;
EXECUTE sp_addrolemember @rolename = N'db_datawriter', @membername = N'MyUser';
Run Code Online (Sandbox Code Playgroud)
如何防止生成 REVOKE CONNECT 行