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


177

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

このユーザー(および他のすべてのユーザー)のパスワードの有効期限を永久にオフにするにはどうすればよいですか?

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


私は、serverfault.comでこれを尋ねた方がいいかもしれません。開発に使用していると言っていたので、これを強制するつもりはありません。また、ここの誰かがこの情報を知っていたり、他の人がこの情報から利益を得る可能性はまだあると思います。
リザードを請求する

私はそれをやると思います。データベースの基本的な質問であり、DBAの問題ではないため、どちらのサイトがより適切であるかを検討していました。
ジョシュコドロフ2009

わからないデュープポリシーは、クロスサイトの質問のためのものですが、ここのリンクです:serverfault.com/questions/37622/...
ジョシュKodroff

回答:


313

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>';

5
これによりプロファイルが変更されました。ただし、デフォルトのプロファイルが作成されたときにそのように設定されていたため、パスワードの有効期限が設定されているユーザーがいます。これらのユーザーアカウントを変更して、パスワードの有効期限が切れないようにするにはどうすればよいですか?
Jay Imerman、2012年

14
select username,expiry_date,account_status from dba_users; account_statusを表示します。有効期限が切れているアカウントの場合、最後にもう一度パスワードをリセットする必要がある場合があります。
ウィル・ウー

6
ユーザーaaaアカウントのロック解除を変更します。
Kalpesh Soni 2013

1
完全にするために、あなたは別のプロファイルにユーザーを変更する必要がある場合:ALTER USER Bob PROFILE MyNonExpiringProfile;

クエリ「select profile from DBA_USERS where username = '<username>';」で行が選択されていません。
gaurav

90

以下のための開発あなたは、他のプロファイルが設定されていない場合は無効にパスワードポリシー(デフォルト1で、すなわち無効にパスワードの有効期限を)することができます:

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

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

alter user user_name identified by new_password account unlock;

40

他の回答では、ユーザーのプロファイル(「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';

2
助けてくれてありがとう。関連する答えを見つけるのはとても難しいです。他のすべての回答はPASSWORD_LIFE_TIMEのみを参照しています。
sabertiger 2014年

SYS.USER $ .PASSWORD列には、大文字と小文字が区別されない(大文字?)バージョンのパスワードのハッシュのみが含まれます。Oracle 11では、システムパラメータSEC_CASE_SENSITIVE_LOGON = FALSEを設定しない限り、SYS.USER $ .SPARE4列には、大文字と小文字を区別するパスワードのハッシュがはるかに長くなります。
Morbo、2015年

16

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


7
推奨される改善されたセキュリティを備えた(アップグレードではなく)新規の11gインストールでは、パスワードはデフォルトで30日後に期限切れになります。
ゲイリーマイヤーズ


0

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

ただし、必要に応じて。

適切なアクセス権がある場合は、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


私は同意しますが、本番環境でパスワードの有効期限を無効にするのは無作法ですが、開発またはテストで無効にすることをお勧めします。
APC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.