oci_password_change

Oracle ユーザーのパスワードを変更する

説明

bool oci_password_change(
    resource $connection,
    string $username,
    string $old_password,
    string $new_password
)
resource oci_password_change(
    string $database_name,
    string $username,
    string $old_password,
    string $new_password
)

ユーザー username のパスワードを変更します。

oci_password_change が役立つのは、 PHP コマンドラインスクリプトで使う場合や PHP アプリケーションで持続的でない接続を使う場合です。

パラメータ

connection

oci_connect あるいは oci_pconnect が返す Oracle 接続 ID。

username

Oracle のユーザー名。

old_password

旧パスワード。

new_password

設定したい、新しいパスワード。

database_name

データベース名。

戻り値

database_name が指定された場合、 oci_password_change は 成功時に true を返します。 失敗した場合に false を返します。 connection が指定された場合、 oci_password_change は 成功時に接続リソースを返します。 失敗した場合に false を返します。

例1 oci_password_change で、接続中のユーザーのパスワードを変更する例

<?php

$dbase      = 'localhost/orcl';
$user       = 'cj';
$current_pw = 'welcome';
$new_pw     = 'geelong';

$c = oci_pconnect($user, $current_pw, $dbase);
oci_password_change($c, $user, $current_pw, $new_pw);
echo "New password is : " . $new_pw . "\n";

?>

例2 oci_password_change で、接続とパスワードの変更を一度に行う例

<?php

$dbase      = 'localhost/orcl';
$user       = 'cj';
$current_pw = 'welcome';
$new_pw     = 'geelong';

$c = oci_pconnect($user, $current_pw, $dbase);
if (!$c) {
    $m = oci_error();
    if ($m['code'] == 28001) { // "ORA-28001: the password has expired"
        // ログインとパスワードリセットを同時に行います
        $c = oci_password_change($dbase, $user, $current_pw, $new_pw);
        if ($c) {
            echo "New password is : " . $new_pw . "\n";
        }
    }
}

if (!$c) {  // 28001 以外のエラーが発生したり、パスワードの変更に失敗したりした場合
    $m = oci_error();
    trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}

// 接続 $c が使えます
// ...

?>

注意

注意:

この関数を使うにせよ Oracle から直接操作するにせよ、 パスワードを変更する際には十分注意しましょう。 持続的接続を使っている場合、PHP アプリケーションからは古いパスワードでも認証できてしまいます。 ユーザーのパスワードを変更したら、ウェブサーバーをすべて再起動させるのがお勧めの方法です。

注意:

Oracle クライアントライブラリあるいはデータベースを 11.2.0.3 より前のリリースから 11.2.0.3 以降のバージョンにアップグレードするときには、クライアントとサーバーのバージョンを同時に上げないと oci_password_change は "ORA-1017: invalid username/password" エラーとなってしまいます。

注意:

oci_password_change の 2 番目の書式は OCI8 バージョン 1.1 から利用可能です。