【问题标题】:Running sqlpackage.exe from AWS CodeDeploy throws an exception从 AWS CodeDeploy 运行 sqlpackage.exe 会引发异常
【发布时间】:2017-01-01 22:21:44
【问题描述】:

我正在尝试从 AWS CodeDeploy 执行的脚本运行 sqlpackage.exe

sqlpackage 命令在以管理员身份登录时在本地 CMD 提示符下运行良好,但在作为 CodeDeploy 管道的一部分调用时不运行。

出现以下错误:

An unexpected failure occurred: DacInstance with the specified instance_id does not exist..

    Unhandled Exception: System.Data.SqlClient.SqlException: DacInstance with the specified instance_id does not exist.
       at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)

似乎无法与数据库建立连接。

CodeDeploy 作为 Windows 服务在Local System 帐户下运行,而我的命令提示符在Administrator 帐户下运行。这是唯一的区别,所以我认为这一定是权限问题。

似乎需要由具有sysadmin 权限的用户安装 dacpac。我尝试(作为测试)将 SQL Server 用户 NT AUTHORITY\SYSTEM 设置为角色 DBCreator

然后部署失败并出现以下错误。

The database settings cannot be modified. You must be a SysAdmin to apply these settings.
The database settings cannot be modified. You must be a SysAdmin to apply these settings.
An error occurred while the batch was being executed.
Updating database (Failed)

但是我不确定如何进行。我猜把NT AUTHORITY\SYSTEM 变成SysAdmin 是个坏主意!

【问题讨论】:

    标签: amazon-web-services sql-server-data-tools aws-code-deploy sqlpackage


    【解决方案1】:

    CodeDeploy 主机代理服务以 LocalSystem 用户身份运行,该用户应具有 NT AUTHORITY\SYSTEM 和 BUILTIN\Administrators 权限。 这是 CodeDeploy 代理执行脚本的方式:

    powershell.exe -ExecutionPolicy Bypass -File <absolute_path_to_your_script_here>
    

    如果您将可执行文件与 appspec.yml 文件一起放在部署包中的文件夹中,您可以尝试将其放在根目录中。 话虽如此,旧版本的主机代理似乎存在这个问题,应该使用 2017 年 3 月发布的最新版本来解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2017-05-22
      相关资源
      最近更新 更多