Команда Sqlplus для изменения пароля к базе данных Oracle в сценарии kornshell - PullRequest
0 голосов
/ 03 июля 2018

Я пишу скрипт для смены паролей в базах данных 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. Как я могу исправить эту команду, чтобы изменение пароля прошло успешно с помощью моего скрипта?

1 Ответ

0 голосов
/ 03 июля 2018

Поскольку старый пароль заключен в двойные кавычки в строке connect, вполне вероятно, что старый и, возможно, также новые пароли имеют специальные символы. Ошибка, которую вы получаете, соответствует любому паролю, скажем, с восклицательным знаком; но также может начинаться с цифры, иметь многобайтовые символы и т. д.

Из документа :

Вы должны заключить следующие пароли в двойные кавычки:

  • Пароли, содержащие многобайтовые символы.
  • Пароли, начинающиеся с цифр или специальных символов и содержащие буквы алфавита. Например:

    "123abc"
    "#abc"
    "123dc$"  
    
  • Пароли, содержащие любые символы, кроме букв алфавита, цифр и специальных символов. Например:

    "abc>"
    "abc@",
    " "
    

Итак, заключите их в alter user тоже:

alter user ${USER_ID} identified by "${NEW_PASS}" replace "${OLD_PASS}";
...