代码之家  ›  专栏  ›  技术社区  ›  Leigh Riffel

如何编写Oracle钱包更改脚本?

  •  2
  • Leigh Riffel  · 技术社区  · 15 年前

    我使用Oracle钱包存储我连接到的数据库的密码。我们的密码策略要求我们经常更改密码,以便编写更改脚本。我有一个批处理文件,可以自己更改数据库密码,但我想编写更改到钱包的脚本。问题是,在调用mkstore后必须输入钱包密码,密码不能作为参数传递。有没有办法在钱包里写下凭证更改的脚本?

    4 回复  |  直到 8 年前
        1
  •  1
  •   Leigh Riffel    15 年前

    这是我想出的一个PowerShell脚本。要求:

    1. PowerShell已安装。
    2. 已启用脚本( 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 "")
    
        2
  •  1
  •   Cosmin    14 年前

    至少11g:

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

    我还没有测试密码是否在从ps-fe_grep可见的进程行中变得模糊。

        3
  •  1
  •   Ajit    10 年前

    通过echo获取商店的passwd,以便编写脚本。

    回音“$passwd”|

    echo“walletpasswd”mkstore-wrl.-列表凭据

    这将列出输出,所有mkstore和orapki的命令也将起作用。

        4
  •  0
  •   Leigh Riffel    8 年前

    自动热键解决方案:

    ; 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
    
    推荐文章