我正在尝试通过Powershell执行Oracle EXPDP(Oracle Data Pump)命令,使用加密的密码文件,这样我就可以将我的数据库密码保留在我的git repo之外。以下是我生成文件的代码:
"Password1" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "C:\Backups\dbPassword.txt"
显然Password1不是实际的密码,但你明白了......
我想编写一个脚本来解密该文件,然后采取解密的"密码1" value并在expdb命令中将其用作我的db密码。这是我到目前为止所提出的:
$dbPassword = cat C:\backups\dbPassword.txt | convertto-securestring -AsPlainText -Force
$timeStamp = "$(get-Date -f MMddyyyy)"
$expdb = 'EXPDP'
$dbCredential = 'system/'+$dbPassword
$expdbDirectory = 'directory=backups'
$expdbFull = 'full=Y'
$expdbDRFileNamePrefix = 'EXPALL_DR_' + $timeStamp
$expdbDRFileNameDMP = $expdbDRFileNamePrefix + '.DMP'
$expdbDRFileNameLOG = $expdbDRFileNamePrefix + '.log'
$expdbDRFile = 'file=' + $expdbDRFileNameDMP
$expdbDRLog = 'log=' + $expdbDRFileNameLOG
$command = $expdb + ' ' + $dbCredential + ' ' + $expdbDirectory + ' ' + $expdbFull + ' ' + $expdbDRFile + ' ' + $expdbDRLog
Invoke-Expression $command
执行此操作时,出现以下错误:
EXPDP :
At line:1 char:1
+ EXPDP system/System.Security.SecureString directory=backups full=Y fi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Export: Release 11.2.0.1.0 - Production on Fri Oct 14 16:09:55 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
UDE-01017: operation generated ORACLE error 1017
ORA-01017: invalid username/password; logon denied
Username:
我认为我需要使用等同于" toString"命令使其成为命令行的完全纯文本。任何人都知道这是什么,或者是否有办法使用PSCredential对象来做到这一点?
谢谢!
答案 0 :(得分:5)
密码本身不会解密,因此您需要自己完成。最简单的方法是创建PSCredential
对象,建议为@briantist。它允许通过其GetNetworkCredential()
方法检索(未加密的)密码。
$dbPassword = Get-Content 'C:\backups\dbPassword.txt' |
ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential('system', $dbPassword)
...
$command = $expdb + ' ' + $cred.UserName + '/' +
$cred.GetNetworkCredential().Password + ...
但是,您将未加密的密码存储在文件中,并且您的外部命令似乎仍然需要纯文本凭据,因此在从文件到命令的传输过程中,我没有看到加密密码的重点。这就像在空旷的地方建造一座大门。
答案 1 :(得分:0)
我想知道问题是否是您自己的密码。您必须注意密码中的特殊字符。例如,&符号&
或竖线|
或重定向字符<>
或引号'
(尤其是双"
),甚至是插入符号{{1}可能会导致问题,因为它们是命令解释程序的特殊字符。你如何逃避这些将是不同的,所以这取决于你有哪些。
您可以先使用一个非常简单的密码尝试相同的操作,看看它是否有效,如果是这样,您可以从仅包含字母数字的密码开始,然后一次添加一个特殊字符以查看它们是否有效。