0

有谁知道如何使用 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
4

1 回答 1

3

SQL 连接使用:

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

或者

  • SQL 身份验证 ("用户 ID=myUsername;Password=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;"
于 2017-01-17T23:33:52.683 回答