是否有工具允许我在多个Oracle数据库中更改密码?
它每月到期,我想同时更改它们。
答案 0 :(得分:4)
有时候,最简单的可能是最好的。使用如下所示的替换变量创建SQL * Plus脚本:
connect myuser/&&oldpass@db1;
alter user myuser identified by &&newpass replace &&oldpass;
connect myuser/&&oldpass@db2;
alter user myuser identified by &&newpass replace &&oldpass;
connect myuser/&&oldpass@db3;
alter user myuser identified by &&newpass replace &&oldpass;
-- and so forth through your list of instances
(当然,你用你的SQL * Net别名替换你的用户ID和“db1”等“myuser”。)构建脚本。运行它,输入一次旧密码和新密码,它将全部更改。每次添加或删除数据库时都需要编辑脚本,但这应该是相当罕见的。请注意,密码在运行时会在屏幕上显示。
答案 1 :(得分:3)
您可以在1个数据库中更改密码(我在几年内没有这样做 - 所以请仔细尝试 - 上次我这样做是7.3.4和8i)然后将哈希从数据库复制到数据库。这曾经工作过。所以......在数据库1中
SQL> password
Changing password for SCOTT
Old password:
New password:
Retype new password:
然后在同一个数据库中
SQL> SELECT password FROM dba_users WHERE username='SCOTT';
PASSWORD
---------------
F81184D39902C27
现在转到其他数据库并在以下位置更改密码:
SQL> ALTER USER scott IDENTIFIED BY VALUES 'F81184D39902C27';
User altered.
你可以编写一个小程序来连接和修改多个。我只有11i 数据库来测试这个。
答案 2 :(得分:1)
我想说如果您必须使用相同的凭据登录到多个数据库,您应该使用其他选项(包括LDAP / Active Directory)进行身份验证。
答案 3 :(得分:1)
如果您的密码在每个数据库上都是相同的,那么您也有这个简单的unix shell脚本:
#!/bin/bash
read -p " Enter Username :" USERNAME ; echo
read -p " Enter old Password :" -s oldpass ; echo
read -p " Enter new Password :" -s newpass ; echo
read -p " Repeat new Password :" -s newpass2 ; echo
if [ "${newpass}" = "${newpass2}" ]
then
sqlplus "${USERNAME}"/${oldpass}@db1 << _EOF
connect "${USERNAME}"/${oldpass}@db1;
alter user "${USERNAME}" identified by ${newpass} replace ${oldpass};
connect "${USERNAME}"/${oldpass}@db2;
alter user "${USERNAME}" identified by ${newpass} replace ${oldpass};
connect "${USERNAME}"/${oldpass}@db3;
alter user "${USERNAME}" identified by ${newpass} replace ${oldpass};
_EOF
else
echo "given new passwords did not match".
fi
希望它有所帮助。
答案 4 :(得分:0)
如果您的系统上有Oracle网格控制,则可以创建作业(在作业中,然后创建sql作业),并指定目标组(如果已定义)或手动选择要通过核对表连接的目标数据库,然后针对这些数据库运行该作业。
答案 5 :(得分:0)
我在这里找到了一个很好的实用工具:http://www.bsutils.com/PassAid.html。
答案 6 :(得分:0)
您可以创建所有数据库的重复列表:
sqlplus <username>/<oldpass>@<database>;
alter user <username> identified by <newpass>;
exit
--Repeat this for as many databases as you need
OR
您可以创建所有所需数据库的表,然后为数据库创建参数。然后绘制数据库名称以使其从表中读取。