2017-01-01 3 views
0

Ich versuche, sqlpackage.exe von einem Skript auszuführen, das von AWS CodeDeploy ausgeführt wird.Das Ausführen von sqlpackage.exe von AWS CodeDeploy löst eine Ausnahme aus

Der Befehl sqlpackage kann von einer lokalen CMD-Eingabeaufforderung ausgeführt werden, wenn er als Administrator angemeldet ist, aber nicht ausgeführt wird, wenn er als Teil der CodeDeploy-Pipeline aufgerufen wird.

Der folgende Fehler tritt auf:

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) 

Es scheint, dass eine Verbindung nicht in der Datenbank vorgenommen werden.

CodeDeploy wird als Windows-Dienst unter einem Local System-Konto ausgeführt, wo meine Eingabeaufforderung, wo dies funktioniert, unter dem Administrator Konto ausgeführt wird. Dies ist der einzige Unterschied, also denke ich, dass dies ein Berechtigungsproblem sein muss.

Es scheint, dass ein dacpac von einem Benutzer mit sysadmin Berechtigungen installiert werden muss. Ich habe (als Test) versucht, dem SQL Server-Benutzer NT AUTHORITY\SYSTEM die Rolle DBCreator zuzuweisen.

Die Bereitstellung ist mit dem folgenden Fehler fehlgeschlagen.

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) 

Ich bin mir nicht sicher, wie man jedoch vorgeht. Ich schätze, dass NT AUTHORITY\SYSTEM eine SysAdmin ist eine schlechte Idee!

Antwort

0

Der CodeDeploy-Host-Agent-Dienst wird als LocalSystem-Benutzer ausgeführt, der die Berechtigungen NT AUTHORITY \ SYSTEM und BUILTIN \ Administrators haben sollte. Dies ist, wie das CodeDeploy Agent das Skript ausführt:

powershell.exe -ExecutionPolicy Bypass -File <absolute_path_to_your_script_here> 

Sie können versuchen, zusammen mit der appspec.yml Datei die ausführbare Datei auf dem Root setzen, wenn Sie es in einem Ordner in Ihrem Bereitstellungspaket setzen. Das heißt, wir scheinen dieses Problem mit den älteren Versionen von Host-Agent, die mit der neuesten Version im März 2017 veröffentlicht werden sollte.

Verwandte Themen