Oracle通过代理用户功能可以实现生产用户的应用滚动修改密码。
测试例子:
生产用户为jyc密码为jyc
现在要求修改jyc的密码为abc,意味着所有应用都得停止同时修改。
此时可以考虑新建代理用户proxy_jyc,密码为jyc1(实际修改建议和生产用户jyc需要的密码abc一致,后续修改应用数据源方便些,少改一次密码。)
每个滚动的应用先用proxy_jyc[jyc]这样的方式连接,注意格式:中括号[],等全部都修改后。
再修改jyc的密码为abc
然后再逐个滚动修改用户为jyc连接即可。
[oracle@lncs ~]$ sqlplus jyc/jycSQL*Plus: Release 11.2.0.4.0 Production on Fri Jan 3 10:23:16 2025Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> create user proxy_jyc identified by jyc1;User created.SQL> alter user jyc grant connect through proxy_jyc;User altered.SQL> conn jyc/jyc
Connected.
SQL> conn jyc/jyc1
ERROR:
ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.
SQL> conn proxy_jyc/jyc1
ERROR:
ORA-01045: user PROXY_JYC lacks CREATE SESSION privilege; logon deniedSQL> !oerr ora 1045
01045, 00000, "user %s lacks CREATE SESSION privilege; logon denied"
// *Cause: A connect was attempted to a userid which does not have
// create session privilege.
// *Action: Grant the user CREATE SESSION privilege.SQL> grant CREATE SESSION to proxy_jyc;
SP2-0640: Not connected
SQL> conn jyc/jyc
Connected.
SQL> grant CREATE SESSION to proxy_jyc;Grant succeeded.SQL> conn proxy_jyc/jyc1
Connected.
SQL> create table p(id int);
create table p(id int)
*
ERROR at line 1:
ORA-01031: insufficient privilegesSQL> conn proxy_jyc/jyc
ERROR:
ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.
SQL> conn proxy_jyc/jyc1
Connected.
SQL> conn proxy_jyc[jyc]/jyc1
Connected.
SQL> create table p(id int);Table created.SQL> select table_name from user_tables;TABLE_NAME
------------------------------
T
TAB1
T1
P
PART_TAB_DROPSQL> conn proxy_jyc[jyc]/jyc
ERROR:
ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.
SQL> conn proxy_jyc[jyc]/jyc1
Connected.
SQL> show user;
USER is "JYC"
SQL> conn proxy_jyc/jyc1
Connected.
SQL> show user;
USER is "PROXY_JYC"
SQL> conn proxy_jyc[jyc]/jyc1
Connected.
SQL> revoke CREATE SESSION from proxy_jyc;Revoke succeeded.SQL> conn proxy_jyc/jyc1
ERROR:
ORA-01045: user PROXY_JYC lacks CREATE SESSION privilege; logon deniedWarning: You are no longer connected to ORACLE.
SQL> conn proxy_jyc[jyc]/jyc1
Connected.
SQL> drop table p;Table dropped.SQL> select table_name from user_tables;TABLE_NAME
------------------------------
T
TAB1
T1
PART_TAB_DROPSQL>
SQL> conn proxy_jyc(jyc)/jyc1
ERROR:
ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.
SQL> conn proxy_jyc{jyc}/jyc1
ERROR:
ORA-01017: invalid username/password; logon denied
相关参考:
oracle无感知修改应用用户密码 – OracleBlog