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
)
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 から利用可能です。