使用安全信用调用SQL命令

时间:2016-02-04 12:13:16

标签: powershell powershell-v2.0 powershell-v3.0

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

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

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

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

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

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

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

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

$ Password的值是System.Security.SecureString,如果我在原始命令中使用此变量,该命令将失败,并且“用户登录失败”

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

任何建议都是欢迎 感谢。

2 个答案:

答案 0 :(得分:5)

创建凭据对象:

$cred = new-object -typeName System.Management.Automation.PSCredential -ArgumentList $user, $pass

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

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

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

答案 1 :(得分:0)

可以使用安全字符串而不将纯文本存储在变量中。这是一个例子。

/update_two