oracle - sqlplus 命令在 kornshell scipt 中更改 oracle 数据库密码
问题描述
我正在编写一个脚本来更改 Oracle 数据库上的密码。我成功地获得了数据库名称、user_id、旧密码和新密码。我有这个命令来更改旧密码并将其设置为新密码:
sqlplus -s /nolog << EOF
connect ${USER_ID}/"${OLD_PASS}"@${DB_NAME}
alter user ${USER_ID} identified by ${NEW_PASS} replace ${OLD_PASS};
/
exit
EOF
当我将结果存储到变量中并打印出变量时,我收到一条错误消息:
ORA-00922: 缺少或无效的选项。
我相信这与 alter user 命令有关。如何修复此命令,以便通过我的脚本成功更改密码?
解决方案
由于您将旧密码用双引号括在connect
字符串中,因此旧密码和新密码似乎都有特殊字符。您收到的错误与带有感叹号的密码一致;但也可以以数字开头,具有多字节字符等。
从文档中:
您必须将以下密码用双引号括起来:
- 包含多字节字符的密码。
以数字或特殊字符开头并包含字母字符的密码。例如:
"123abc" "#abc" "123dc$"
包含除字母字符、数字和特殊字符之外的任何字符的密码。例如:
"abc>" "abc@", " "
因此,也将它们包含在alter user
:
alter user ${USER_ID} identified by "${NEW_PASS}" replace "${OLD_PASS}";
推荐阅读
- php - 使用 PHP 更改其他插件函数中的变量值
- wordpress - 我想在帖子元中添加一个新值而不删除旧值
- ios - bringSubviewToFront 不适用于自定义按钮的子视图
- javascript - 如果机器人试图获取的 subreddit 不存在,我该如何获取?
- unix - 无法以 root 用户身份在 /var/log 下创建目录
- java - 使用 gridlayoutmanager 在 recyclerview 中显示 9 个项目
- pine-script - Pine Script - 在单一布局中左右缩放
- javascript - 无法检索文本框值
- javascript - 为什么在按钮标签 onclick=methodname 没有给出输出但 onclick=operation 给出输出
- java - spring boot 冷启动在 aws lambda 上花费的时间太长,并且 boot 初始化两次