使用安全信用调用SQL命令

Boa*_*411 3 powershell powershell-2.0 powershell-3.0

我在Powershell命令中如何使用安全字符串来运行远程SQL查询.

以下命令在powershell中运行正常,因为它在我自己的帐户下运行 - 它还在提供用户名和密码的值时返回结果.

 "SELECT COUNT(E.intEmployeeID) AS Count FROM Employees E WITH(NOLOCK)" -       ServerInstance "SERVERA\INSTANCEA" -Database "DATABASEA" -u USER1 -p SomePassword
Run Code Online (Sandbox Code Playgroud)

我想自动化/安排这个脚本,因为我不想在我的脚本中使用clear txt中的密码,我正在研究如何将其设置为安全/加密的字符串.所以我使用下面的代码创建了一个加密密码.问题是我不知道如何将此密码传回我的命令..

这将创建加密的字符串并存储在文件中.这将是一个远程保护的文件.

$File = "C:\password.txt"
[Byte[]] $Key = (1..16)
$Password = "SomePassword" | ConvertTo-SecureString -AsPlainText -Force
$Password | ConvertFrom-SecureString -key $Key | Out-File $File
Run Code Online (Sandbox Code Playgroud)

然后,这将读取加密文件并以安全字符串存储...但是如何让我的Invoke SQL命令使用此密码.

$File = "C:\Cred.txt"
[Byte[]] $Key = (1..16)
$Password = Get-Content $File | ConvertTo-SecureString -Key $Key
Run Code Online (Sandbox Code Playgroud)

$ Password的值是System.Security.SecureString,如果我在原始命令中使用此变量,则命令失败并显示"登录失败的用户"

用于执行SQL查询的帐户是SQL身份验证帐户,而不是域帐户.

任何建议都是欢迎致谢.

小智 5

创建凭据对象:

$cred = new-object -typeName System.Management.Automation.PSCredential -ArgumentList $user, $pass
Run Code Online (Sandbox Code Playgroud)

然后,将密码转换为纯文本:

[string]$pass = $cred.GetNetworkCredential().Password
invoke-sqlcmd -UserName $user -Password $pass -Query 'select @@servername'
Run Code Online (Sandbox Code Playgroud)

Ivoke-SqlCmd只能使用纯文本密码.

  • 这有效,但我不喜欢它;) (3认同)
  • 微软应该真正纠正这个问题并允许“Invoke-SQLCmd”接受Secure-String对象。这是荒唐的。 (3认同)
  • 使用这种方法,您将失去安全字符串的安全性 (2认同)