Создание пользователя в dacpac, развернутом с помощью SqlPackage.exe, приводит к ошибке входа в систему SqlException
проблема
Я пытаюсь автоматизировать развертывание SQL, включая пользователя и роли. Это работает, когда я создаю пользователя в Sql Management Studio, но при развертывании dacpack я получаю SqlException: Ошибка входа для пользователя "MyUser"
Описание
У меня SQL Server 2016 установлен на локальном хосте с включенной аутентификацией Sql Server и Windows.
У меня есть проект базы данных SQL в Visual Studio с этими файлами:
MyUser.sql [build action = build]
CREATE USER [MyUser] WITH Password='$(MyUserPassword)';
RolesMembership.sql [build action = build]
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. Но когда я развертываю его с помощью 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