转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
一个生成Oracle用户密码的通用小程序         ★★★★

一个生成Oracle用户密码的通用小程序

作者:闵涛 文章来源:闵涛的学习笔记 点击数:711 更新时间:2009/4/22 21:58:58


 
  做为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





没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台