5

问题

我正在尝试自动化 SQL 部署,包括用户和角色。当我在 Sql Management Studio 中创建用户时,它可以工作,但是当我部署 dacpack 时,我得到 SqlException: Login Failed for user 'MyUser'

描述

  1. 我在 localhost 上安装了 SQL Server 2016,同时启用了 Sql Server 和 Windows 身份验证。

  2. 我在 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]
      
  3. 我构建它并使用命令行部署创建的 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 行

4

0 回答 0