2012-06-01 67 views
4

我們正在使用pstrami運行部署腳本。部署的一部分是執行數據庫遷移。遷移正在使用具有集成安全性的連接字符串。由匿名用戶執行的遠程PowerShell腳本

當腳本執行遠程機器的遷移失敗,SQL錯誤稱登錄失敗,用戶對'NT AUTHORITY \ ANONYMOUS登錄

執行腳本的人是域管理員。我們運行的其他部署與啓動該進程的用戶執行遠程腳本。

回答

1

這是場景:
您從desktopA運行pstrami(部署)腳本。該腳本將您的安裝文件推送到serverA。然後在serverA上,腳本作爲從desktopA啓動腳本的人員遠程運行。其中一個步驟是使用「集成安全性」使用連接字符串參數與fluentmigrator一起運行sql數據庫,並且數據庫位於serverB上。

連接字符串例如:

$migration_db_connection = Data Source=serverB;Initial Catalog=PropertyDb;Integrated Security=SSPI; 
.\migrate.exe /conn "$migration_db_connection" /db SqlServer /a $migration_assembly /profile DEBUG 

Pstrami使用它使用正在運行的腳本的帳戶作爲默認用戶的PowerShell命令調用命令。所以,會發生什麼情況是,當您從desktopA運行腳本爲「jonDoe」時,它會在serverA上進行身份驗證。所以你的pstrami腳本在serverA上的「jonDoe」下運行。當您在serverA上執行fluentmigrator腳本爲「jonDoe」時,fluentmigrator會爲用戶'NT AUTHORITY \ ANONYMOUS LOGON'返回錯誤登錄失敗。在IIS中,當您需要訪問IIS服務器中的其他資源併發生某些相當常見的情況時,會遇到一個有趣的情況。使用集成安全性時,禁用匿名訪問並啓用模擬,Windows安全措施將啓用,並且不允許您的站點訪問任何網絡服務器上的資源。 (http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx

這是我如何解決Windows身份驗證和遇到的雙跳問題。直接在您的sql數據庫服務器上運行您的遷移腳本,並將其作爲服務器目標包含在您的pstrami環境中。

例子:

Environment "dev" -servers @(
    Server "serverA" @("InstallWeb") 
    Server "serverB" @("RunMigrations") 
    ) 

更多關於雙跳

0

我無法對您的問題發表評論並將其作爲答案發布。我稍後會更新它。

這可能是由於SQL Server沒有登錄您的Windows登錄帳戶的帳戶。如果這是問題,請將登錄用戶添加到遠程計算機中的SQL Server。

如果已經解決了這個問題,那麼您可以在SQL Server以及您正在使用的特定數據庫上將權限設置爲DB_Owner作爲「NT AUTHORITY \ ANONYMOUS LOGON」。

+0

不,用戶在SQL Server中有一個帳戶。他是服務器管理員。他以相同的方式運行所有部署。我們的數據庫管理員不喜歡匿名用戶對數據庫有完全訪問權 –

+0

在這種情況下,我很無奈。這是我能夠找到這個問題的唯一原因。 – RinoTom

8

的問題是,憑據不會跳變到SQL Server的集成安全性。你需要做到以下幾點:

在服務器(即拍即SQL Server連接的一個,以管理員身份運行:

Enable-WSManCredSSP -Role server 

在客戶機上,以管理員身份運行:

Enable-WSManCredSSP -Role client -DelegateComputer YOUR_SERVER_NAME 

要打開這件事的所有服務器,你可以運行:

Enable-WSManCredSSP -Role client -DelegateComputer * 

最後,您調用命令確保你運行-authentication credssp。舉例:

invoke-command -computername $remoteServer -authentication credssp -scriptblock { write-host "hello!" } -credential $credentials