使用域用户通过Invoke-Command连接到SQL Server

时间:2019-07-19 12:14:57

标签: c# sql-server entity-framework powershell windows-authentication

我在远程服务器上有一个控制台应用程序,该应用程序使用执行该过程的用户的凭据连接到SQL Server。

当我使用服务帐户在服务器本身上执行控制台应用程序时,它将很好地获取凭据并成功登录到数据库。但是,为了使其适合我组织的自动化流程,我需要从另一个服务器运行控制台应用程序,该服务器正在使用无法访问数据库的其他服务帐户运行。

它看起来像这样:

Automation server running under Automation Service account(无权访问数据库)

通话

Application server under Application account and executes app(可以访问数据库)

为简化此过程,我将控制台应用程序替换为尝试连接数据库的简单Powershell脚本。结果是一样的。

$Credential = New-Object System.Management.Automation.PSCredential $ApplicationUser, $SecurePassword

Write-Host "Running executable" -ForegroundColor Green
Invoke-Command -ComputerName $applicationServer -Credential $Credential -ScriptBlock { 
    Write-Host $(whoami)
    $SQLServer = "YourServerName"
    $SQLDBName = "YourDBName"
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server = $ServerName; Database = $DbName; Integrated Security=true;" 
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = 'StoredProcName'
    $SqlCmd.Connection = $SqlConnection 
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd 
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet) 
    $SqlConnection.Close()
 }

以上脚本失败,并显示以下错误消息 "Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'."

当我打印当前用户时,它声称它是应用程序用户,应该可以访问数据库。

在调用Invoke-Command时,似乎剥夺了某些用户的凭据,但这是我的知识受到限制的地方。

是否有任何配置可以使其正常工作?

我知道有很多更容易的选择,但这是我在组织中受到限制的基础结构和安全性约束。 (相反,使用SQL用户将是一个非常简单的选择,我们不允许这样做)

1 个答案:

答案 0 :(得分:0)

string connectionString = $"Data Source=_ServerName;Initial Catalog=_DatabaseName;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;User ID=_Username;Password=_Paasword";

您好尝试使用此ConnectivityString,但首先使用您的信息更改此信息
_ServerName_DatabaseName_Username_Password