问题
我正在尝试自动化 SQL 部署,包括用户和角色。当我在 Sql Management Studio 中创建用户时,它可以工作,但是当我部署 dacpack 时,我得到 SqlException: Login Failed for user 'MyUser'
描述
我在 localhost 上安装了 SQL Server 2016,同时启用了 Sql Server 和 Windows 身份验证。
我在 Visual Studio 中有带有这些文件的 Sql 数据库项目:
MyUser.sql [构建操作=构建]
CREATE USER [MyUser] WITH Password='$(MyUserPassword)';RolesMembership.sql [构建操作=构建]
ALTER ROLE [db_datareader] ADD MEMBER [MyUser] GO ALTER ROLE [db_datawriter] ADD MEMBER [MyUser]
我构建它并使用命令行部署创建的 dacpac:
SqlPackage.exe /Action:Publish /SourceFile:"MyDatabase.dacpac" /Profile:"MyDatabase.publish.xml" /v:MyUserPassword=c2Aaaaaaaaaaaa`
当我在 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';
如何防止生成 REVOKE CONNECT 行