一个生成Oracle用户密码的通用小程序
2007-05-10 12:21:17 来源:WEB开发网核心提示: 然后,运行脚本 gen_pass_oracle ,一个生成Oracle用户密码的通用小程序(2),则自动生成Oracle 用户的相应的密码;运行脚本gen_pass_unix ,则自动生成unix 操作系统用户的相应的密码,同时,不将其计入密码串中, 生成的Oracle 数据库用户密码保存
然后,运行脚本 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 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接