一个生成Oracle用户暗码的通用小顺序

  来源:网海拾贝




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





版权声明: 原创作品,许愿转载,转载时请务必以超链接情势标明文章 原始因由 、作者信息和本声明。不然将清查司法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975931.html