我在远程服务器上有一个控制台应用程序,该应用程序使用执行该过程的用户的凭据连接到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用户将是一个非常简单的选择,我们不允许这样做)
答案 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