几百个微服务的用户,都用了同一个用户user1来连接数据库。如果要修改user1的用户,会导致几百个微服务都要在同一时间内重启,业务不太接受这种方式,业务希望用灰度的方式逐步切换。
因此可以采用代理用户的方式来修改密码。
大致步骤:
(1)假如平时用的用户叫user1,创建代理用户 create user proxy_user1 identified by PASSWORD;
(2)alter user uese1 grant connect throgh proxy_user1
(3)应用【逐个切换】切换到代理代理用户proxy_user1,需要注意的地方,是连接方式修改了。 本来是 conn user1/passwd_of_user1,现在是要 conn proxy_user1[user1]/passwd_of_proxy_user1. 需要应用逐个修改连接方式。用代理用户的密码来登录。
(4)全部应用的连接,切到代理用户之后,修改原来的user1的密码。
(5)修改user1为新密码
(6)应用逐个切回user1
检查当前的连接,是否有使用代理用户(在v$session是看不到代理用户,只能看到被代理的用户,需要配合v$session_connect_info 看)。
select s.sid, s.serial#, s.username, s.osuser, sci.authentication_type from v$session s, v$session_connect_info sci where s.sid = sci.sid and s.serial# = sci.serial# and sci.authentication_type = 'PROXY';
不得不说,oracle还是挺强大,在别的数据库好像没这个功能。