尝试使用Winpe中的Get-Credential连接到SQL

时间:2017-01-17 22:56:28

标签: sql powershell authentication winpe

有没有人知道如何使用PowerShell将Get-Credentials传递给SQL登录?

我尝试了许多不同的方法但没有成功。

这需要在winpe中运行 - 我可以使用Get-Credential获取凭据,但我需要使用它们连接到SQL DB - 我一直在使用。

NT AUTHORITY \ ANONYMOUS LOGIN'登录失败以下代码在Windows中正常工作 - 我以用户身份登录,因此它不能传递凭据。如果我删除trusted_connection = true;我得到失败的登录,这是WINPE的最佳测试,因为没有人登录。有没有办法将这些Get-Credentials传递给SQL? 这个或相同的代码在WINPE中不起作用 - 不确定为什么呢?

$Cred = Get-Credential

Function SQL_CONNECT ($Query){

    $ConnectionString = "server=VM855;database=LDMS2016;user   id=$Cred.Username;password=$Cred.Password;trusted_connection=true;"
    $SqlConnection = New-Object  System.Data.SQLClient.SQLConnection($ConnectionString)
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.Connection = $SqlConnection
    $SqlCmd.CommandText = $Query
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $a = $SqlAdapter.Fill($DataSet)
    $SqlConnection.Close()
    $DataSet.Tables[0]
}

$Owners = SQL_CONNECT "Select Task_Name, Task_owner, first_action_query_date from PROV_HISTORY_TASK" | Select-Object Task_Owner, first_action_query_date

$Owners

1 个答案:

答案 0 :(得分:3)

SQL连接使用:

  • Windows身份验证(“Trusted_Connection = True”)

  • SQL身份验证(“用户ID = myUsername;密码= myPassword;”)

您不能同时拥有“Trusted_Connection”和“用户ID /密码”,您必须选择一个。

要使用Windows身份验证,PowerShell进程必须以有权访问数据库的用户身份运行。即,您必须启动PowerShell进程以模拟该用户,并运行您的代码。

粗略的例子看起来像这样:

# Get the other user's credentials
$credential = Get-Credential

# Execute a scriptblock as another user
$commands = @'
#....code....    

$ConnectionString = "server=VM855;database=LDMS2016;trusted_connection=true;"

#.....etc....
'@

Start-Process -FilePath Powershell.exe -LoadUserProfile -Credential $credential -ArgumentList '-Command', $commands

或者,更简单的方法是使用SQL身份验证,并对用户名/密码进行硬编码。

 $ConnectionString = "server=VM855;database=LDMS2016;user id=Username;password=Password;"

或者至少你必须使用Read-Host来读取用户名和密码,因为$Cred.Password返回System.Security.SecureString而不是纯文本密码。

对于前。

 $Username = Read-Host "User:"
 $Password = Read-Host "Password:"

 $ConnectionString = "server=VM855;database=LDMS2016;user id=$Username;password=$Password;"