開発にはOracleを使用しています。データベースの再構築に常に使用するブートストラップアカウントのパスワードの有効期限が切れています。
このユーザー(および他のすべてのユーザー)のパスワードの有効期限を永久にオフにするにはどうすればよいですか?
デフォルトでパスワードの有効期限が切れているOracle 11gを使用しています。
開発にはOracleを使用しています。データベースの再構築に常に使用するブートストラップアカウントのパスワードの有効期限が切れています。
このユーザー(および他のすべてのユーザー)のパスワードの有効期限を永久にオフにするにはどうすればよいですか?
デフォルトでパスワードの有効期限が切れているOracle 11gを使用しています。
回答:
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>';
select username,expiry_date,account_status from dba_users;
account_statusを表示します。有効期限が切れているアカウントの場合、最後にもう一度パスワードをリセットする必要がある場合があります。
他の回答では、ユーザーのプロファイル(「DEFAULT」プロファイルなど)を適切に変更するとパスワードが設定され、一度設定すると期限切れになることはありません。
ただし、1人のコメント投稿者が指摘しているように、プロファイルの古い値で設定されたパスワードはすでに期限切れになっていて、(プロファイルの指定された猶予期間後であれば)アカウントがロックされています。
ロックされたアカウントで期限切れのパスワードを解決するには(回答のコメントに記載されています)、ALTER USERコマンドの1つのバージョンを使用します。
ALTER USER xyz_user ACCOUNT UNLOCK;
ただし、ロック解除コマンドは、アカウントが実際にロックされているアカウントでのみ機能し、猶予期間内のアカウントでは機能しません。つまり、パスワードの有効期限が切れているが、アカウントはまだロックされていません。これらのアカウントの場合、パスワードは、ALTER USERコマンドの別のバージョンでリセットする必要があります。
ALTER USER xyz_user IDENTIFIED BY new_password;
以下は、特権ユーザー(例:ユーザー 'SYS')がユーザーのパスワードをデータベースに保存されている現在の既存のハッシュ値にリセットするために使用できる小さなSQL * Plusスクリプトです。
編集:古いバージョンのOracleはパスワードまたはパスワードハッシュをpword列に格納し、新しいバージョンのOracleはパスワードハッシュをspa4列に格納します。以下のスクリプトは、pword列とspa4列を収集するように変更されましたが、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';
デフォルトでは、パスワードの有効期限の動作は有効期限が切れることはないと思います。ただし、開発者ユーザーセットのプロファイルを設定し、を設定することができますPASSWORD_LIFE_TIME
。詳細については、orafaqを参照してください。一人の視点と使い方の例については、こちらをご覧ください。
パスワードの有効期限をオフにすることは、データの機密性、整合性、および可用性に脅威をもたらす可能性があるため、お勧めしません。
ただし、必要に応じて。
適切なアクセス権がある場合は、SQLに従ってください
SELECT username、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