web-dev-qa-db-ja.com

Oracleパスワードの有効期限を切るにはどうすればよいですか?

開発にはOracleを使用しています。データベースを再構築するために常に使用するブートストラップアカウントのパスワードが期限切れです。

このユーザー(および他のすべてのユーザー)のパスワードの有効期限を永久に無効にする方法

デフォルトでパスワードの有効期限が切れるOracle 11gを使用しています。

163
Josh Kodroff

Oracleで特定のユーザープロファイルのパスワード有効期限ポリシーを変更するには、まずユーザーが使用しているプロファイルを確認します。

select profile from DBA_USERS where username = '<username>';

その後、次のようにして期限切れにならないように制限を変更できます。

alter profile <profile_name> limit password_life_time UNLIMITED;

以前に制限を確認したい場合は、次のようにします。

select resource_name,limit from dba_profiles where profile='<profile_name>';
287
Pedro Carriço

development他のプロファイルが設定されていない場合、パスワードポリシーを無効にすることができます(つまり、デフォルトのパスワードの有効期限を無効にする)。

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

その後、パスワードをリセットしてユーザーアカウントのロックを解除します。二度と期限切れになることはありません。

alter user user_name identified by new_password account unlock;
83
Shimon Pozin

他の回答者が述べているように、ユーザのプロファイル(例えば 'DEFAULT'プロファイル)を適切に変更すると、パスワードが設定されても期限切れになることはありません。

しかし、あるコメント投稿者が指摘しているように、プロファイルの古い値で設定されたパスワードはすでに期限切れになっている可能性があり、(プロファイルの指定された猶予期間が過ぎると)アカウントはロックされます。

ロックされたアカウントを持つ有効期限が切れたパスワード(回答のコメントで提供されている)の解決策は、ALTER USERコマンドの1つのバージョンを使用することです。

ALTER USER xyz_user ACCOUNT UNLOCK;

ただし、unlockコマンドは、アカウントが実際にロックされているアカウントに対してのみ機能しますが、猶予期間にあるアカウント、つまりパスワードは期限切れになっているがアカウントがまだロックされていないアカウントに対しては機能しません。これらのアカウントでは、パスワードを別のバージョンのALTER USERコマンドでリセットする必要があります。

ALTER USER xyz_user IDENTIFIED BY new_password;

以下は、特権ユーザー(ユーザー「SYS」など)がユーザーのパスワードをデータベースに格納されている現在の既存のハッシュ値にリセットするために使用できる、小さなSQL * Plusスクリプトです。

編集:古いバージョンのOracleは、パスワードまたはパスワードハッシュをpwordカラムに格納し、新しいバージョンのOracleは、パスワードハッシュをspare4カラムに格納します。以下のスクリプトは、pwordとspare4の列を収集するように変更されましたが、ユーザーのアカウントをリセットするためにspare4の列を使用するように変更されました。必要に応じて修正してください。

REM Tell SQL*Plus to show before and after versions of variable substitutions.
SET VERIFY ON
SHOW VERIFY

REM Tell SQL*Plus to use the ampersand '&' to indicate variables in substitution/expansion.
SET DEFINE '&'
SHOW DEFINE

REM Specify in a SQL*Plus variable the account to 'reset'.
REM Note that user names are case sensitive in recent versions of Oracle.
REM DEFINE USER_NAME = 'xyz_user'

REM Show the status of the account before reset.
SELECT
  ACCOUNT_STATUS,
  TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
  TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
  DBA_USERS
WHERE
  USERNAME = '&USER_NAME';

REM Create SQL*Plus variable to hold the existing values of the password and spare4 columns.
DEFINE OLD_SPARE4 = ""
DEFINE OLD_PASSWORD = ""

REM Tell SQL*Plus where to store the values to be selected with SQL.
REM Note that the password hash value is stored in spare4 column in recent versions of Oracle,
REM   and in the password column in older versions of Oracle.
COLUMN SPARE4HASH NEW_VALUE OLD_SPARE4
COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD

REM Select the old spare4 and password columns as delimited strings 
SELECT 
  '''' || SPARE4 || '''' AS SPARE4HASH,
  '''' || PASSWORD || '''' AS PWORDHASH
FROM 
  SYS.USER$ 
WHERE 
  NAME = '&USER_NAME';

REM Show the contents of the SQL*Plus variables
DEFINE OLD_SPARE4
DEFINE OLD_PASSWORD

REM Reset the password - Older versions of Oracle (e.g. Oracle 10g and older) 
REM ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD;

REM Reset the password - Newer versions of Oracle (e.g. Oracle 11g and newer) 
ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_SPARE4;

REM Show the status of the account after reset
SELECT
  ACCOUNT_STATUS,
  TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
  TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
  DBA_USERS
WHERE
  USERNAME = '&USER_NAME';
35
Kieron Hardy

パスワードの有効期限は、デフォルトでは期限切れにならないことになっています。ただし、開発者ユーザーセットのプロファイルを設定してPASSWORD_LIFE_TIMEを設定することはできます。詳しくは orafaq を見てください。一人の人の視点と用法の例としては、 こちら をご覧ください。

16
akf

パスワードの有効期限をオフにすることは、データの機密性、整合性、および可用性に対する潜在的な脅威につながる可能性があるため、お勧めできません。

しかしあなたがそうしたいのなら。

適切なアクセス権がある場合は、以下のSQLを使用してください。

SELECTユーザ名、account_status FROM dba_users;

これはあなたにこのような結果を与えるはずです。

   USERNAME                       ACCOUNT_STATUS
------------------------------ -----------------

SYSTEM                         OPEN
SYS                            OPEN
SDMADM                         OPEN
MARKETPLACE                    OPEN
SCHEMAOWNER                    OPEN
ANONYMOUS                      OPEN
SCHEMAOWNER2                   OPEN
SDMADM2                        OPEN
SCHEMAOWNER1                   OPEN
SDMADM1                        OPEN
HR                             EXPIRED(GRACE)

USERNAME                       ACCOUNT_STATUS
------------------------------ -----------------

APEX_PUBLIC_USER               LOCKED
APEX_040000                    LOCKED
FLOWS_FILES                    LOCKED
XS$NULL                        EXPIRED & LOCKED
OUTLN                          EXPIRED & LOCKED
XDB                            EXPIRED & LOCKED
CTXSYS                         EXPIRED & LOCKED
MDSYS                          EXPIRED & LOCKED

今、あなたはPedroCarriço答えを使うことができます https://stackoverflow.com/a/6777079/2432468

1
Pawan Kumar