Создание пользователя в dacpac, развернутом SqlPackage.exe, приводит к ошибке входа в систему SqlException

Проблема

Я пытаюсь автоматизировать развертывание SQL, включая пользователей и роли. Это работает, когда я создаю пользователя в Sql Management Studio, но когда я развертываю dacpack, я получаю SqlException: Ошибка входа для пользователя «MyUser»

Описание

  1. У меня установлен SQL Server 2016 на локальном хосте с включенной аутентификацией Sql Server и Windows.

  2. У меня есть проект базы данных Sql в Visual Studio с этими файлами:

    • MyUser.sql [действие сборки = сборка]

      CREATE USER [MyUser] WITH Password='$(MyUserPassword)';
      
    • RolesMembership.sql [сборка action=сборка]

      ALTER ROLE [db_datareader] ADD MEMBER [MyUser]
      GO
      ALTER ROLE [db_datawriter] ADD MEMBER [MyUser]
      
  3. Я создаю его и развертываю созданный 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


person Liero    schedule 27.10.2017    source источник