作為Unix系統管理員、Oracle DBA或ERP應用管理員,定期輪換關鍵用戶密碼是保障系統安全的基礎操作。然而,面對數十台小型機、上百個數據庫與應用用戶,手工生成並修改複雜密碼(需字母數字隨機組合)不僅效率低下,極易出錯。本文分享一套基於Excel VBA的自動化方案,實現Oracle與Unix用戶密碼的批量生成、腳本產出與記錄歸檔,大幅降低運維負擔並提升安全性。
Oracle ERP架構中,除applsyspub、applsys、apps三大核心用戶需保持應用與數據庫密碼一致外,其餘模組用戶(如AR、GL等)的應用層密碼可與數據庫層分離。平時僅輪換數據庫密碼,打補丁前再同步應用層,兼顧安全與工作量。
' 密碼長度(預設8位)
pass_length = 8
' 字符集起始ASCII:65=A-Z大寫字母;48=0-9數字+大小寫
start_asc = 65 ' 僅大寫字母(Oracle 11g前不區分大小寫)
' Unix腳本中改為 start_asc = 48 並排除特殊符號
char_value = start_asc + Int(Rnd(1) * rnd_base),rnd_base根據字符集範圍動態計算。=)防Excel誤判為公式;Unix版額外排除:[\]^_`等特殊符號。change_pass.sql:含ALTER USER ... IDENTIFIED BY ...語句,SQL*Plus直接@change_pass.sql執行。change_pass.txt:Unix密碼對照表,需手工passwd修改。Sub gen_pass_oracle()
' ... 變量聲明 ...
pass_length = 8
start_asc = 65
rnd_base = 90 - start_asc
Open "c:\change_pass.sql" For Output As #1
Cells(1, 1) = "Username": Cells(1, 2) = "PassWord"
' 生成APPS佔位註釋
' 循環讀取第1欄用戶名,生成密碼寫入文件與第2欄
Close #1
End Sub
Sub gen_pass_unix()
' ... 類似結構,輸出至 change_pass.txt ...
' 字符集包含數字、大小寫,排除特殊符號
End Sub
提示:生成腳本前務必備份原密碼記錄;執行change_pass.sql建議在維護窗口期進行,並驗證關鍵業務連接正常。