一個生成Oracle使用者密碼的通用小程式(轉)
一個生成Oracle使用者密碼的通用小程式(轉)[@more@]做為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 的方法,確定密碼的組成 0-9,A-Z還是僅 A-Z其主要實現為:透過檢查工作表中每一行第1列(或第3列)是否為空,判斷是否結束密碼生成工作。若非空,即有使用者名稱,則進行迴圈,生成在程式頭部定義的指定長度的密碼串。密碼串中的字元為透過起始字元的 ascii 值加上隨機數產生的隨機值得到的新的 ascii 值,再將其轉換為字元型,並加入密碼串中。當密碼串的長度達到指定長度時,將其組合為一個sql 語句寫入檔案中,同時,在該行的第2列(或第4列)中寫入該密碼串。
同時,考慮到在 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(50) As String '使用者名稱
dim pass_length as integer '定義生成的密碼的長度
dim start_asc as integer ' 定義從哪個字元開始生成
pass_length = 8 ' 設定密碼長度為 8 位
Rem start_asc = 48 ' 設定密碼從 0 開始
start_asc = 65 ' 設定密碼從 A 開始
rem 由於 Oracle 資料庫使用者密碼不區分大小寫,故,視所選擇的起始字母,決定隨機數
rnd_base = 90 - start_asc
?
rem 開啟檔案,用於輸出生成的改密碼的指令碼
Open "c:change_pass.sql" For Output As #1
rem 同時,在工作表上記錄相應的密碼,以便列印出來備作為記錄,此處為先寫標題
Cells(1, 1) = "Username": Cells(1, 2) = "Password"
Cells(1, 3) = "Username": Cells(1, 4) = "Password"
rem 先生成 apps 的密碼,但指令碼中加上註釋,因 apps密碼必須與應用程式一起改
rem 先初始化密碼串為空白
temp_str = ""
For bit_count = 1 To pass_length
char_value = start_asc + Int(Rnd(1) * rnd_base)
rem 此處為為防=號引起 excel 誤認為是公式,從而程式出錯。
If char_value = 61 Then
char_value = 62
End If
rem 組合成密碼
temp_str = temp_str + Chr$(char_value)
Next bit_count
rem 將生成的 apps 密碼輸出到指令碼檔案
Print #1, "REM alter user apps" + " identified by " + temp_str + ";"
rem 同時,記錄在工作表上
Cells(2, 3) = "APPS": Cells(2, 4) = temp_str
rem 需生成密碼的使用者名稱從 row_num 行開始
row_num = 2
rem 若第一列非空,則建立密碼,否則退出 Do While Cells(row_num, 1) <> ""
temp_str = ""
For bit_count = 1 To pass_length
char_value = start_asc + Int(Rnd(1) * rnd_base)
If char_value = 61 Then
char_value = 62
End If
temp_str = temp_str + Chr$(char_value)
Next bit_count
Print #1, "alter user " + Cells(row_num, 1) + " identified by " + temp_str +
Cells(row_num, 2) = temp_str
rem 獲取下一行
row_num = row_num + 1
Loop
rem 所有使用者的密碼已生成,關閉檔案
Close #1
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(50) As String '使用者名稱
dim pass_length as integer '定義生成的密碼的長度
dim start_asc as integer ' 定義從哪個字元開始生成
pass_length = 8
start_asc = 48 ' 0
Rem start_asc = 65 ' A
rem 由於 unix 密碼支援大小寫,故,視所選擇的起始字母,決定隨機數的範圍,以確保
rnd_base = 122 - start_asc
?
rem 開啟檔案,用於輸出生成的改密碼的指令碼
Open "c:change_pass.txt" For Output As #1
rem 同時,在工作表上記錄相應的密碼,以便列印出來備作為記錄,此處為先寫標題
Cells(1, 3) = "Username": Cells(1, 4) = "Password"
row_num = 2
rem 若第三列非空,則建立密碼,否則退出 Do While Cells(row_num, 3) <> ""
temp_str = ""
For bit_count = 1 To pass_length
char_value = start_asc + Int(Rnd(1) * rnd_base)
rem 91-94 為 [ ] ^ _ `
rem 因不願在unix 密碼串中包含該類字元,故,透過減少已增大的計數器以保證密碼的
長度,同時,不將其計入密碼串中,以排除它們
If (char_value >= 58 And char_value <= 64) Or (char_value >= 91 And char_value <= 96) Then
bit_count = bit_count - 1
Else
temp_str = temp_str + Chr$(char_value)
End If
Next bit_count
Print #1, "user " + Cells(row_num, 1) + " : " + temp_str
Cells(row_num, 4) = temp_str
rem 獲取下一行
row_num = row_num + 1
Loop
rem 所有使用者的密碼已生成,關閉檔案
Close #1
End Sub
但是,由於所管理的小型機及資料庫、應用系統較多,每月更改近百個使用者的密碼,不論是密碼的生成,還是密碼的更改,工作量均很大,尤其是密碼的生成,為了加強安全性,密碼不能太簡單,最好為字母與數字的隨機組合。但大量的密碼,若不借助自動生成,則其編排是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 的方法,確定密碼的組成 0-9,A-Z還是僅 A-Z其主要實現為:透過檢查工作表中每一行第1列(或第3列)是否為空,判斷是否結束密碼生成工作。若非空,即有使用者名稱,則進行迴圈,生成在程式頭部定義的指定長度的密碼串。密碼串中的字元為透過起始字元的 ascii 值加上隨機數產生的隨機值得到的新的 ascii 值,再將其轉換為字元型,並加入密碼串中。當密碼串的長度達到指定長度時,將其組合為一個sql 語句寫入檔案中,同時,在該行的第2列(或第4列)中寫入該密碼串。
同時,考慮到在 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(50) As String '使用者名稱
dim pass_length as integer '定義生成的密碼的長度
dim start_asc as integer ' 定義從哪個字元開始生成
pass_length = 8 ' 設定密碼長度為 8 位
Rem start_asc = 48 ' 設定密碼從 0 開始
start_asc = 65 ' 設定密碼從 A 開始
rem 由於 Oracle 資料庫使用者密碼不區分大小寫,故,視所選擇的起始字母,決定隨機數
rnd_base = 90 - start_asc
?
rem 開啟檔案,用於輸出生成的改密碼的指令碼
Open "c:change_pass.sql" For Output As #1
rem 同時,在工作表上記錄相應的密碼,以便列印出來備作為記錄,此處為先寫標題
Cells(1, 1) = "Username": Cells(1, 2) = "Password"
Cells(1, 3) = "Username": Cells(1, 4) = "Password"
rem 先生成 apps 的密碼,但指令碼中加上註釋,因 apps密碼必須與應用程式一起改
rem 先初始化密碼串為空白
temp_str = ""
For bit_count = 1 To pass_length
char_value = start_asc + Int(Rnd(1) * rnd_base)
rem 此處為為防=號引起 excel 誤認為是公式,從而程式出錯。
If char_value = 61 Then
char_value = 62
End If
rem 組合成密碼
temp_str = temp_str + Chr$(char_value)
Next bit_count
rem 將生成的 apps 密碼輸出到指令碼檔案
Print #1, "REM alter user apps" + " identified by " + temp_str + ";"
rem 同時,記錄在工作表上
Cells(2, 3) = "APPS": Cells(2, 4) = temp_str
rem 需生成密碼的使用者名稱從 row_num 行開始
row_num = 2
rem 若第一列非空,則建立密碼,否則退出 Do While Cells(row_num, 1) <> ""
temp_str = ""
For bit_count = 1 To pass_length
char_value = start_asc + Int(Rnd(1) * rnd_base)
If char_value = 61 Then
char_value = 62
End If
temp_str = temp_str + Chr$(char_value)
Next bit_count
Print #1, "alter user " + Cells(row_num, 1) + " identified by " + temp_str +
Cells(row_num, 2) = temp_str
rem 獲取下一行
row_num = row_num + 1
Loop
rem 所有使用者的密碼已生成,關閉檔案
Close #1
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(50) As String '使用者名稱
dim pass_length as integer '定義生成的密碼的長度
dim start_asc as integer ' 定義從哪個字元開始生成
pass_length = 8
start_asc = 48 ' 0
Rem start_asc = 65 ' A
rem 由於 unix 密碼支援大小寫,故,視所選擇的起始字母,決定隨機數的範圍,以確保
rnd_base = 122 - start_asc
?
rem 開啟檔案,用於輸出生成的改密碼的指令碼
Open "c:change_pass.txt" For Output As #1
rem 同時,在工作表上記錄相應的密碼,以便列印出來備作為記錄,此處為先寫標題
Cells(1, 3) = "Username": Cells(1, 4) = "Password"
row_num = 2
rem 若第三列非空,則建立密碼,否則退出 Do While Cells(row_num, 3) <> ""
temp_str = ""
For bit_count = 1 To pass_length
char_value = start_asc + Int(Rnd(1) * rnd_base)
rem 91-94 為 [ ] ^ _ `
rem 因不願在unix 密碼串中包含該類字元,故,透過減少已增大的計數器以保證密碼的
長度,同時,不將其計入密碼串中,以排除它們
If (char_value >= 58 And char_value <= 64) Or (char_value >= 91 And char_value <= 96) Then
bit_count = bit_count - 1
Else
temp_str = temp_str + Chr$(char_value)
End If
Next bit_count
Print #1, "user " + Cells(row_num, 1) + " : " + temp_str
Cells(row_num, 4) = temp_str
rem 獲取下一行
row_num = row_num + 1
Loop
rem 所有使用者的密碼已生成,關閉檔案
Close #1
End Sub
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-963821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個修改Oracle使用者密碼的小訣竅(轉)Oracle密碼
- 修改ORACLE使用者密碼的一個方法:Oracle密碼
- 一個PHP通用隨機密碼的實現PHP隨機密碼
- 【密碼】Oracle使用者密碼系列密碼Oracle
- 多重影分身:一套程式碼如何生成多個小程式?
- [轉]寫好程式碼的10個祕密
- GO程式碼生成程式碼小思小試Go
- Linux使用者登入密碼的生成Linux密碼
- 生成goldengate使用者的密碼暗文Go密碼
- 一個自動生成oracle job的指令碼Oracle指令碼
- 批量生成卡號密碼的php程式密碼PHP
- 求一個java程式碼生成工具Java
- 密碼生成密碼
- 利用Dll實現通用密碼驗證框 (轉)密碼
- oracle如何修改單個使用者密碼永不過期Oracle密碼
- 一個簡單的學生成績管理程式 (轉)
- 關於oracle18位密碼生成Oracle密碼
- 遷移oracle使用者密碼Oracle密碼
- 一個高效、安全、通用的防火牆共享上網指令碼(轉)防火牆指令碼
- 絕密!為WindowsXP設定一個隱形密碼(轉)Windows密碼
- 寫一個簡單的程式碼生成器
- Linux下三個有用的密碼生成工具Linux密碼
- Linux下三個密碼生成工具Linux密碼
- Tp生成小程式二維碼
- hd-cg輝度通用程式碼生成器
- 敲程式碼時的一個小疑問
- Oracle使用者密碼過期和使用者被鎖解決方法【轉】Oracle密碼
- .NET生成小程式碼,併合自定義背景圖生成推廣小程式二維碼
- 直播小程式原始碼,小程式生成二維碼 (相容H5、微信小程式)原始碼H5微信小程式
- 一個簡易版的T4程式碼生成
- 用dhtml做了一個密碼管理器 (轉)HTML密碼
- 在密碼學中,“加鹽”(Salting)是指在儲存使用者密碼的雜湊值之前,向原始密碼新增一個隨機生成的字串(稱為“鹽”Salt)的過程。密碼學隨機字串
- Oracle釋出密碼工具補預設密碼漏洞(轉)Oracle密碼
- oracle 檢視使用者密碼的修改時間Oracle密碼
- 修改oracle中的使用者名稱和密碼Oracle密碼
- oracle BI工具的預設使用者和密碼Oracle密碼
- 忘記oracle的sys密碼該如何重置;附如何修改oracle資料庫使用者密碼Oracle密碼資料庫
- 程式碼生成工具(一)