做為Unix 系統管理員
Oracle 數據庫管理員
Oracle ERP 應用系統管理員
需要不定期地更改各系統中重要用戶的密碼
以保證系統及數據的安全
但是
由於所管理的小型機及數據庫
應用系統較多
每月更改近百個用戶的密碼
不論是密碼的生成
還是密碼的更改
工作量均很大
尤其是密碼的生成
為了加強安全性
密碼不能太簡單
最好為字母與數字的隨機組合
但大量的密碼
若不借助自動生成
則其編排是十分困難的
Oracle ERP 系統中應用系統用戶(指各子系統的用戶
非指具體應用用戶)同時也是Oracle 數據庫用戶(如應收模塊
用戶為 AR
AR既是數據庫用戶
又是應用用戶)
而且
只有 applsyspub(登錄系統的公用用戶)
applsys(應用基礎用戶)
apps(具體應用操作用戶)為必須為應用系統中密碼與數據庫密碼一致外
其它應用的數據庫用戶密碼可以與應用系統中密碼中不一致
只需在對應用系統進行打 patch 工作時才需將其改為一致
因而
可在打 patch 前
在應用系統中將應用系統用戶密碼修改為與數據庫一致即可
平時不用修改其密碼
這樣一則減少了工作量
二則加強了系統的安全性
更改數據庫用戶密碼可通過在 sqlplus 執行 alter user identified by 密碼 的命令而實現
因而
可以通過自動生成密碼腳本的方式
高效地完成密碼的更改工作
而 Unix 用戶密碼則由於需由管理員負責更改密碼的並不多
故可在自動生成後
手工進行修改
為了生成較為復雜的密碼
同時提高工作效率
我用 Excel 自帶的 VBA 編寫了一個小腳本
運行該程序
則自動生成一個更改用戶密碼的腳本
同時
將用戶密碼記錄在工作表上
以便於打印出來
保存在密碼本中
做為記錄
首先
需在工作表中第一列輸入各個要修改密碼的數據庫用戶的用戶名
在第三列輸入各個要更改密碼的操作系統用戶的用戶名
然後
運行腳本 gen_pass_oracle
則自動生成Oracle 用戶的相應的密碼
運行腳本 gen_pass_unix
則自動生成unix 操作系統用戶的相應的密碼
生成的Oracle 數據庫用戶密碼保存在 change_pass
sql 中
可在 sqlplus 中調用該腳本
迅速完成密碼的修改工作
生成的Unix 用戶密碼保存在 change_pass
txt 中
需手工逐個地更改密碼
可通過在程序首部修改 pass_length 的值的方法
確定生成的密碼的長度
可通過在程序首部修改 start_asc 的方法
確定密碼的組成
A
Z還是僅 A
Z
其主要實現為
通過檢查工作表中每一行第
列(或第
列)是否為空
判斷是否結束密碼生成工作
若非空
即有用戶名
則進行循環
生成在程序頭部定義的指定長度的密碼串
密碼串中的字符為通過起始字符的 ascii 值加上隨機數產生的隨機值得到的新的 ascii 值
再將其轉換為字符型
並加入密碼串中
當密碼串的長度達到指定長度時
將其組合為一個 sql 語句寫入文件中
同時
在該行的第
列(或第
列)中寫入該密碼串
同時
考慮到在 Excel 中會將
=
開頭的字符串當作公式對待
故
在生成密碼串時
將等於
=
的ascii 值過濾
用類似方法
可使生成的密碼串中不包含其它不想包含的字符
通過使用這種方式
生成並修改密碼的工作量得到大大減少
安全性得到提高
實際上
這種方法產生的密碼不限於 unix 與 Oracle
可用於各種操作系統中重要用戶的密碼的生成及各種數據庫
應用系統的用戶密碼生成
Sub gen_pass_app()
Dim bit_count as integer
循環變量
密碼中位數計數器
dim row_num as integer
需生成密碼的用戶名信息開始的行號
dim rnd_base As Integer
隨機數種子
Dim char_value As Integer
密碼中每個字符的 ascii 值
Dim temp_str As String
密碼串
Dim username(
) As String
用戶名
dim pass_length as integer
定義生成的密碼的長度
dim start_asc as integer
定義從哪個字符開始生成
pass_length =
設定密碼長度為
位
Rem start_asc =
設定密碼從
開始
start_asc =
設定密碼從 A 開始
rem 由於 Oracle 數據庫用戶密碼不區分大小寫
故
視所選擇的起始字母
決定隨機數的范圍
以確保至 Z 結束
rnd_base =
start_asc
rem 打開文件
用於輸出生成的改密碼的腳本
Open
c:\change_pass
sql
For Output As #
rem 同時
在工作表上記錄相應的密碼
以便打印出來備作為記錄
此處為先寫標題
Cells(
) =
Username
: Cells(
) =
Password
Cells(
) =
Username
: Cells(
) =
Password
rem 先生成 apps 的密碼
但腳本中加上注釋
因 apps密碼必須與應用程序一起改
rem 先初始化密碼串為空白
temp_str =
For bit_count =
To pass_length
char_value = start_asc + Int(Rnd(
) * rnd_base)
rem 此處為為防=號引起 excel 誤認為是公式
從而程序出錯
If char_value =
Then
char_value =
End If
rem 組合成密碼
temp_str = temp_str + Chr$(char_value)
Next bit_count
rem 將生成的 apps 密碼輸出到腳本文件
Print #
REM alter user apps
+
identified by
+ temp_str +
;
rem 同時
記錄在工作表上
Cells(
) =
APPS
: Cells(
) = temp_str
rem 需生成密碼的用戶名從 row_num 行開始
row_num =
rem 若第一列非空
則創建密碼
否則退出
Do While Cells(row_num
) <>
temp_str =
For bit_count =
To pass_length
char_value = start_asc + Int(Rnd(
) * rnd_base)
If char_value =
Then
char_value =
End If
temp_str = temp_str + Chr$(char_value)
Next bit_count
Print #
alter user
+ Cells(row_num
) +
identified by
+ temp_str +
;
Cells(row_num
) = temp_str
rem 獲取下一行
row_num = row_num +
Loop
rem 所有用戶的密碼已生成
關閉文件
Close #
End Sub
Sub gen_pass_unix()
Dim bit_count as integer
循環變量
密碼中位數計數器
dim row_num as integer
需生成密碼的用戶名信息開始的行號
dim rnd_base As Integer
隨機數種子
Dim char_value As Integer
密碼中每個字符的 ascii 值
Dim temp_str As String
密碼串
Dim username(
) As String
用戶名
dim pass_length as integer
定義生成的密碼的長度
dim start_asc as integer
定義從哪個字符開始生成
pass_length =
start_asc =
Rem start_asc =
A
rem 由於 unix 密碼支持大小寫
故
視所選擇的起始字母
決定隨機數的范圍
以確保至 z 結束
rnd_base =
start_asc
rem 打開文件
用於輸出生成的改密碼的腳本
Open
c:\change_pass
txt
For Output As #
rem 同時
在工作表上記錄相應的密碼
以便打印出來備作為記錄
此處為先寫標題
Cells(
) =
Username
: Cells(
) =
Password
row_num =
rem 若第三列非空
則創建密碼
否則退出
Do While Cells(row_num
) <>
temp_str =
For bit_count =
To pass_length
char_value = start_asc + Int(Rnd(
) * rnd_base)
rem
為 : ; < = > ? @
rem
為 [ \ ] ^ _ `
rem 因不願在unix 密碼串中包含該類字符
故
通過減少已增大的計數器以保證密碼的長度
同時
不將其計入密碼串中
以排除它們
If (char_value >=
And char_value <=
) Or (char_value >=
And char_value <=
) Then
bit_count = bit_count
Else
temp_str = temp_str + Chr$(char_value)
End If
Next bit_count
Print #
user
+ Cells(row_num
) +
:
+ temp_str
Cells(row_num
) = temp_str
rem 獲取下一行
row_num = row_num +
Loop
rem 所有用戶的密碼已生成
關閉文件
Close #
End Sub
From:http://tw.wingwit.com/Article/program/Oracle/201311/18021.html