1

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

以管理员身份登录时,该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 作为在Local System帐户下运行的 Windows 服务运行,而我的命令提示符在该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是个坏主意!

4

1 回答 1

0

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

powershell.exe -ExecutionPolicy Bypass -File <absolute_path_to_your_script_here>

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

于 2017-05-13T16:36:22.023 回答