Oracle 生成随机密码
需求:需要定期更改密码。要求是1、密码位数11位。2、必须包含大小写字母、数字、特殊字符。3、排除一些特殊字符如()、@、&
oracle数据库中有可已生成随机密码包dbms_random,但是用起来有点儿不方便,满足不了上面的需求。一些网页工具或者小软件,使用起来也不方便。
所以就想在oracle自己写函数来实现,并且可以建立数据库表方便管理密码,数据做这些事情有天生的优势。
第一步:在数据库中创建用来管理密码的表。
举例:生成Linux中oracle、grid用户随机密码
CREATE TABLE HOST_TAB (HOSTID NUMBER, HOSTNAME VARCHAR2(100), DESCRIPTION VARCHAR2(2000)); --创建业务系统列表
CREATE TABLE PASSWORD_TAB (HOSTID NUMBER,ORACLE_PASSWORD VARCHAR2(100),GRID_PASSWORD VARCHAR2(100),SHELL_TEXT VARCHAR2(100),CHANGE_DATE DATE) ;--创建密码维护表
第二步:创建可以随机生成密码的函数。
随便googel了一把,原来有国外的哥们儿自己写函数实现了,膜拜下… 原文地址如下:同时,希望copy的网友转载博客时说明出处
http://mahmoudoracle.blogspot.tw/2012/08/generate-random-password-in-oracle.html
如果不想用这哥们儿写的函数,也可以学习oracle数据库dbms_random.string函数,学习并修改代码如下:不得不说oracle很值得我们学习
CREATE OR REPLACE FUNCTION random_password(password_num in varchar2)
RETURN VARCHAR2
PARALLEL_ENABLE is
optx char(1);
rng NUMBER;
n BINARY_INTEGER;
ccs VARCHAR2(128); -- candidate character subset
xstr VARCHAR2(4000);
BEGIN
FOR i IN 1 .. length(password_num) LOOP
/* Get random integer within specified range */
n := TRUNC(rng * dbms_random.value) + 1;
/* Append character to random_password2 */
xstr := xstr || SUBSTR(ccs, n, 1);
optx := SUBSTR(password_num, I, 1);
IF optx = 'u' THEN
-- upper case alpha characters only
ccs := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
rng := 26;
ELSIF optx = 'l' THEN
-- lower case alpha characters only
ccs := 'abcdefghijklmnopqrstuvwxyz';
rng := 26;
ELSIF optx = 'a' THEN
-- alpha characters only (mixed case)
ccs := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || 'abcdefghijklmnopqrstuvwxyz';
rng := 52;
ELSIF optx = 'n' THEN
-- any numeric characters (upper)
ccs := '0123456789';
rng := 10;
ELSIF optx = 'x' THEN
-- any special characters (upper)
ccs := ' !"#$%&()*+,-./:;<=>?@';
rng := 23;
ELSIF optx = 'p' THEN
-- any printable char (ASCII subset)
ccs := ' !"#$%&''()*+,-./' || '0123456789' || ':;<=>?@' ||
'ABCDEFGHIJKLMNOPQRSTUVWXYZ' || '[\]^_`' ||
'abcdefghijklmnopqrstuvwxyz' || '{|}~';
rng := 95;
ELSE
ccs := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
rng := 26; -- default to upper case
END IF;
END LOOP;
RETURN xstr;
END random_password;
第三步:使用存储过程来实现。并且创建数据库调度任务定期修改密码。
create or replace procedure change_passwords(host_name varchar2) as
cursor v_cur is
select t1.hostid from host_tab t1 where t1.hostname = lower(host_name);
begin
for v_i in v_cur loop
begin
insert into password_tab
(hostid, oracle_password, grid_password, shell_text, change_date)
values
(v_i.hostid,
'',
'',
'echo oracle:' || RANDOM_PASSWORD(‘ulaxpnlaxpnl’) ||
'|chpasswd && echo grid:' || RANDOM_PASSWORD('ulaxpnlaxpnl') ||
'|chpasswd',
sysdate);
commit;
end;
end loop;
update password_tab t
set t.oracle_password = substr(t.shell_text, 13, 11),
t.grid_password = substr(t.shell_text, 47, 11);
commit;
end;
使用:
execute change_passwords(hostname=>’test’); test 为host_tab 表中hostname。
select t2.hostname,
t2.description,
t1.oracle_password,
t1.grid_password,
t1.shell_text,
t1.change_date
from password_tab t1
left join host_tab t2
on t1.hostid = t2.hostid;
最后在root用户下执行shell_text中的命令。
也可以通过oracle 的dbms scheduler job 和 crontab来自动实现。
-------------------------------------------------------------------------------------------------
允许copy,转载请说明出处….
Oracle 生成随机密码的更多相关文章
- php生成随机密码(php自定义函数)转自先锋教程网
php生成随机密码(php自定义函数) 时间:2015-12-16 20:43:49来源:网络 导读:php随机密码的生成代码,使用php自定义函数生成指定长度的随机密码,密码规则为小写字母与数字的随 ...
- Linux 命令行生成随机密码的十种方法
Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法.这些方法均收集于Command-Line ...
- Oracle生成千万测试数据
oracle 生成千万测试数据 做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试 ...
- PHP生成随机密码的4种方法及性能对比
PHP生成随机密码的4种方法及性能对比 http://www.php100.com/html/it/biancheng/2015/0422/8926.html 来源:露兜博客 时间:2015-04 ...
- oracle生成.net的guid方法;
最近在做一个T1的.NET项目,数据库oracle的时候,遇到一个问题..NET里面的某个数据库表类的某个字段是guid类型.但是用oracle生成的guid.跟.NET的guid 无法识别.导致报错 ...
- linux生成随机密码
通常情况下大家生成密码都好困惑,一来复杂程度不够会不安全,复杂程度够了又不能手动随便敲击键盘打出一同字符(但通常情况下这些字符是有规律的), 使用1password 或者 keepass 这种软件生成 ...
- Oracle 生成指定范围内随机日期
Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...
- Oracle生成查询包括对应于所有数据表记录语句中指定的字段名
应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 d ...
- 【转】PHP生成随机密码的几种方法
使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法 ...
随机推荐
- PHP经验集锦
最近刚刚完成手中的项目,比较闲.来这儿转转,把积累的一些技巧分享给大家!1.关于PHP重定向 方法一:header("Location: index.php"); 方法二:echo ...
- ASP.NET MVC 教程汇总
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- Android 获取本机WIFI及3G网络IP
获取本机WIFIprivate String getLocalIpAddress() { WifiManager wifiManager = (WifiManager) getSystemServic ...
- 自定义TreeList单元格 z
DevExpress Treelist自定义单元格,加注释和行序号.以上一节的列表为例,实现以下效果:预算大于110万的单元格突出显示,加上行序号以及注释,如下图: 添加行序号要用到CustomDra ...
- C# delegate 学习 (练这么久终于悟出来点东东了,继续加油! ^_^)
前言 从事开发工作两年有余了,但还是对Delegate,Event神马的看见就头疼,文章看过无数,自己也练习过好多遍,但到用的时候或者人家换了一种形式之后就又不懂了,哎~智商捉急啊!! 但是,这两天的 ...
- dbms_file_transfer使用简介
dbms_file_transfer这个包可以在两个位置传输文件,分别可以有以下位置: a 从一个asm diskgroup传输到另外一个asm diskgroup b 从一个asm diskgrou ...
- 2016 Multi-University Training Contest 5 1011 Two DP
http://acm.hdu.edu.cn/showproblem.php?pid=5791 HDU5791 Two 题意 :两个数组,多少个不连续子串相等 思路: dp[i][j] :a串i结尾,b ...
- MapReduce的执行过程.
作业在运行时,数据或者是作业调用的一个运行图. 用户写的代码通过JobClient提交给JobTracker Job对象中封装了JobClient JobConf和我们的Job对象几乎是一回事. 把我 ...
- 基础排序算法,java实现(快速,冒泡,选择,堆排序,插入)
1.冒泡排序: (1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. (2)外面再套个循环就行. 算法复杂度:O(N2) 不罗嗦,上代码: //冒泡排序(两两交换,外加一个外循环) pub ...
- gdb 技巧
现实数组: 比如说要显示a[10]中全部的内容用 p a显示的是地址,用p *a显示的是第一个元素显示全部或某一个:p (int [10])*a或者p *a@10 如果你使用 p *a@3 或 p * ...