首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Excel VBA 自動生成 Oracle/Unix 複雜密碼腳本實戰

     編輯:Oracle 資料庫基礎

業務痛點

  • 管理百台小型機、數十個 Oracle/ERP 系統,月度輪換近百用戶密碼。
  • 手工編寫複雜密碼(字母+數字隨機組合)效率低、易出錯。
  • 需同步生成:
    - Oracle ALTER USER ... IDENTIFIED BY 腳本(.sql)
    - Unix user:pass 明文列表(.txt,人工執行 passwd)
  • 密碼需留存打印歸檔,滿足審計要求。

解決方案:Excel VBA 雙模式生成器

工作表佈局

欄用途說明
AOracle 用戶名第 2 行起,空行結束
B生成的 Oracle 密碼自動填寫,供打印歸檔
CUnix 用戶名第 2 行起,空行結束
D生成的 Unix 密碼自動填寫,供打印歸檔

核心參數(代碼頂部可調)

  • pass_length = 8:密碼長度。
  • start_asc = 65 ('A'):字符集起始 ASCII(65=A-Z,48=0-9A-Z混合)。
  • rnd_base = 90 - start_asc:隨機範圍(Oracle 不區分大小寫,僅大寫字母 26 個)。
  • Unix 模式 start_asc = 48、rnd_base = 122-48=74(含大小寫數字符號),並**過濾不可見/特殊字符**(ASCII 58-64, 91-96)。

關鍵邏輯

  1. 遍歷 A 欄(或 C 欄)非空行。
  2. 循環 pass_length 次:char = Chr(start_asc + Int(Rnd * rnd_base))。
  3. 過濾等號 (= ASCII 61):防 Excel 誤識為公式導致報錯。
  4. Unix 額外過濾 [:;@[\]^_`] 等特殊符號。
  5. 拼裝密碼串 → 寫入 B/D 欄 → 輸出文件:
    - change_pass.sql:ALTER USER <user> IDENTIFIED BY <pwd>;
    - change_pass.txt:user <user> : <pwd>

核心代碼片段(精簡版)


Sub GenOraclePass()
  pass_length = 8: start_asc = 65: rnd_base = 25
  Open "C:\change_pass.sql" For Output As #1
  Print #1, "REM alter user apps identified by " & GenPwd() & ";"
  row = 2
  Do While Cells(row, 1) <> ""
    pwd = GenPwd()
    Print #1, "alter user " & Cells(row, 1) & " identified by " & pwd & ";"
    Cells(row, 2) = pwd
    row = row + 1
  Loop
  Close #1
End Sub

Function GenPwd() As String
  Dim s As String, i As Long, c As Long
  For i = 1 To pass_length
    c = start_asc + Int(Rnd * rnd_base)
    If c = 61 Then c = 62 ' 過濾 =
    s = s & Chr(c)
  Next
  GenPwd = s
End Function

擴展與治理建議

  • 密碼複雜度策略:參數化長度、字符集、必含類型(大小寫/數字/特殊符),生成後驗證合規。
  • 審計留痕:生成文件自動加水印(生成時間/操作人/版本),歸檔加密存儲。
  • 自動化執行:結合排程任務(Windows Task / Cron)定時推送 .sql 至目標庫執行,實現全流程無人值守。
  • 通用性:同邏輯適用於 MySQL、PostgreSQL、SQL Server、Linux/Windows 本地賬號等任意系統。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved