简而言之,我想在没有管理员干预的情况下通过 shell 脚本自动完成自助过期密码更改。
不幸的是,我的方法失败了,我不确定为什么:
sqlplus -S /nolog << !
connect $userid/$password
xyzzy1 # my original uses $newpass
xyzzy1 # but results are the same
select distinct version from product_component_version;
exit;
!
生产
ERROR: ORA-28001: the password has expired # connection succeeded
Changing password for USER
New password: # carriage return succeeded?
Retype new password: # carriage return succeeded?
ERROR: ORA-00988: missing or invalid password(s) # variables/STDIN may be NULL?
Password unchanged
SP2-0042: unknown command "xyzzy1" - rest of line ignored.
SP2-0042: unknown command "xyzzy1" - rest of line ignored.
SP2-0640: Not connected
它似乎忽略了对新密码请求的传递响应,但同时它没有挂起。
手动连接并以交互方式提供相同的响应确实有效。我想知道为什么密码更改过程不接受 STDIN。
有任何想法吗?
注意:老问题Programmatically Change Expired Oracle DB Password? 在写这篇文章时提供了,虽然它完全符合我的推导,但它对我不起作用。我不确定这方面的礼仪,所以提前为(重新)发布道歉。
我的环境是 Solaris 和 Oracle 10g/11g。