2010-11-11 7 views
2

Я использую кошелек Oracle для хранения паролей для баз данных, к которым я подключаюсь. Наша политика паролей требует, чтобы мы часто меняли наши пароли, чтобы я хотел был сценариев изменений. У меня есть пакетный файл, который может самостоятельно изменять пароли базы данных, но я хотел бы также скопировать изменения в кошелек. Проблема заключается в том, что после вызова mkstore необходимо ввести пароль кошелька, и пароль не может быть передан в качестве параметра. Есть ли способ сценариев изменений учетных данных в кошельке?Как изменить сценарии Oracle Wallet?

ответ

1

Вот сценарий Powershell, который я придумал. Требования:

  1. PowerShell установлен.
  2. Scripting включен (Set-ExecutionPolicy RemoteSigned работает под управлением администратора).
  3. Сценарий находится в каталоге c: \ oracle \ WalletCreator.
  4. Wasp.dll от Windows Automation Snapin for PowerShell находится в папке сценария.

Бумажник будет создан в c: \ oracle \ Wallets. Вот сценарий.

Import-Module c:\oracle\WalletCreator\WASP.dll 

$WalletCreated = 0 

cls 
Write-Host "               " -foregroundcolor White -backgroundcolor DarkRed 
Write-Host " Warning: This script will delete your current wallet. " -foregroundcolor White -backgroundcolor DarkRed 
Write-Host "               " -foregroundcolor White -backgroundcolor DarkRed 

do { 
    #Get credentials 
    Write-Host " " 
    Write-Host " New Wallet Entry           " -foregroundcolor White -backgroundcolor DarkGreen 
    Write-Host " To exit press return without entering anything.  " -foregroundcolor White -backgroundcolor DarkGreen 
    $DB = Read-Host "Connection Name" 
    if ($DB -eq "") { 
     Return 
    } 
    $Username = Read-Host "  Username" 
    if ($Username -eq "") { 
     Return 
    } 
    $Password = Read-Host -AsSecureString "  Password" 

    #Convert from SecureString to String. 
    $BasicString = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password) 
    $Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BasicString) 
    if ($Password -eq "") { 
     Return 
    } 

    if ($WalletCreated -eq 0) { 
     #Create folder in case it doesn't exist. 
     md c:\oracle\Wallets -Force | Out-Null 

     #Delete any wallet in the folder now. 
     del c:\oracle\Wallets\*.* | Out-Null 

     #Get GUID for wallet password. 
     $WalletPassword = [guid]::NewGuid().toString() 
     $WalletPassword = $WalletPassword + "`r" 

     #Create Wallet. 
     Start-Process -FilePath mkstore -ArgumentList "-wrl c:\oracle\Wallets\ -create" 
     Start-Sleep -Milliseconds 500 
     Select-Window -ProcessName cmd | Select -First 1 | Send-Keys -keys $WalletPassword 
     Start-Sleep -Milliseconds 300 
     Select-Window -ProcessName cmd | Select -First 1 | Send-Keys -keys $WalletPassword 

     $WalletCreated = 1 
     Start-Sleep -Milliseconds 1000 
    } 

    #Create Credential. 
    $CC = "-wrl c:\oracle\Wallets\ -createCredential " + $DB + " " 
    $CC = $CC + $Username + " " + $Password 
    Start-Process -FilePath mkstore -ArgumentList $CC 
    Start-Sleep -Milliseconds 300 
    Select-Window -ProcessName cmd | Select -First 1 | Send-Keys -keys $WalletPassword 
    Start-Sleep -Milliseconds 1000 
} 
until ($DB -eq "") 
1

С 11g, по крайней мере:

orapki wallet change_pwd -wallet {wallet directory} \ 
       -oldpwd {old password} -newpwd {new password} 

Я не проверял получить ли пароли запутывается в технологической линии видимого из п.с. -FE | Grep.

+1

Спасибо за ответ. Исправьте меня, если я ошибаюсь, но это изменяет пароль для самого кошелька, а не учетные данные в кошельке. –

1

Получите passwd для магазина через эхо, чтобы вы могли его сценаризировать.

echo "$ passwd" |

echo "WalletPasswd" | mkstore -wrl. -listCredential

Это будет список вывода, также команды для всех mkstore, orapki будет работать

0

AutoHotKey Решение:

; CreateWallet.ahk 

#NoEnv 
SetWorkingDir %A_ScriptDir% 
CoordMode, Mouse, Window 
SendMode Input 
#SingleInstance Force 
SetTitleMatchMode 2 
#WinActivateForce 
SetControlDelay 1 
SetWinDelay 0 
SetKeyDelay -1 
SetMouseDelay -1 
SetBatchLines -1 


Macro1: 
Random, WalletPassword, 10000000000, 9999999999999999999999999 
WalletPassword := WalletPassword "ExtraCharacters" 
InputBox, Username, Username, Please enter your database username, , , , , , , , lriffel 
InputBox, DatabasePassword, Database Password, Please enter the database password., HIDE 
Run, c:\windows\system32\cmd.exe, c:\ 
Sleep, 500 
Send, md c{:}\oracle\Wallet{enter} 
Sleep, 200 
Send, cd c{:}\oracle\Wallet{enter} 
Sleep, 200 
Send, del -s c{:}\oracle\Wallet\*.*{enter} 
Sleep, 200 
Send, Y{enter} 
Sleep, 200 
Send, mkstore -wrl c:\oracle\Wallet\ -create{enter} 
Sleep, 200 
Send, %WalletPassword%{enter} 
Sleep, 200 
Send, %WalletPassword%{enter} 
Sleep, 200 
Loop, Read, F:\Programs\CreateWallet\dbs.txt 
{ 
    WinHide, ahk_class ConsoleWindowClass 
    Sleep, 333 
    Send, mkstore -wrl c:\oracle\Wallet\ -createCredential %A_LoopReadLine% %Username% %DatabasePassword%{enter} 
    Send, %WalletPassword%{enter} 
    Sleep, 200 
    Send, cls{enter} 
    Sleep, 200 
    WinShow, ahk_class ConsoleWindowClass 
    Sleep, 550 
} 
Send, exit{enter} 
MsgBox, 64, Wallet Created, Wallet Created 
Return 

; This script was created using Pulover's Macro Creator 
; www.macrocreator.com