魔法が使えなくなるまで。

魔法使いを卒業したらブログ辞める

alter user 文で sys のパスワードを変更してはいけない

Oracle Database の話です。

日々の運用の中で、SYS ユーザのパスワードを変更することがあるかと思います。

一般的にパスワードを変更する場合は、以下のDDL文を発行します。

SQL>ALTER USER username IDENTIFIED BY "new_password";

しかし、ユーザが sys の場合は注意しなければなりません。

以下、マニュアルより引用。

Oracle Databaseセキュリティ・ガイド 11gリリース2 (11.2) B56285-12

SYSユーザー・パスワードの変更

SYSユーザーのパスワードを変更する場合は、 ORAPWDコマンドライン・ユーティリティを使用して、使用するパスワードが含まれたパスワード・ファイルを新規作成する必要があります。ALTER USER文やPASSWORDコマンドを使用したSYSユーザー・パスワードの変更はしないでください。次のことに注意してください。

  • SYSユーザー・アカウントは、ほとんどの内部再帰SQLが使用します。そのため、ALTER USER文を使用してこのパスワードを変更しようとするときにデータベースがオープンしていると、デッドロックが生じる可能性があります。

Oracle Databaseユーザーのセキュリティの管理

マニュアルには、ALTER USER文を使用して、SYSのパスワードを変更するなと書いているだけで、実際は変更できます。
個人的に作ったDBであれば、問題が発生しても気にならないでしょうが、大規模システムを扱っている場合は注意が必要です。

ちなみに上記は、11gのマニュアルですが、12cのマニュアルにも同様のことが書かれていたので、バージョンに関係はないようです。



(追記)
別のマニュアルをみると、「ALTER USER文を使用してSYSパスワードを変更します」と書いてあり内容が矛盾していました。

以下、マニュアルより
Oracle Database管理者ガイド 11gリリース2 (11.2) B56301-08

管理者パスワードとデータ・ディクショナリとの同期の維持
REMOTE_LOGIN_PASSWORDFILE初期化パラメータをNONEからEXCLUSIVEまたはSHAREDに変更した場合、または別のSYSパスワードを使用してパスワード・ファイルを再作成した場合、データ・ディクショナリ内のパスワードとSYSユーザーのパスワード・ファイルが同じになるようにする必要があります。

SYSパスワードを同期化するには、ALTER USER文を使用してSYSパスワードを変更します。ALTER USER文により、ディクショナリとパスワード・ファイルのパスワードは更新されて同期化されます。

https://docs.oracle.com/cd/E16338_01/server.112/b56301/dba.htm#i1006853

どちらの、マニュアルも正しいことを書いていると思うので、何らかの解釈の違いがあるのか。
詳しい人に見解を聞きたいところ。

おわり。