如何closuresOracle密码到期?

我正在使用Oracle进行开发。 我经常用来重build我的数据库的引导帐户的密码已经过期。

如何永久closures此用户(和所有其他用户)的密码到期?

我正在使用默认密码过期的Oracle 11g。

要在Oracle中修改特定用户configuration文件的密码过期策略,请首先检查用户正在使用的configuration文件:

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

对于开发 ,如果没有设置其他configuration文件(例如,在默认密码失效时禁用密码过期),可以禁用密码策略:

 ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL; 

然后,重置密码并解锁用户帐户。 它不应该再过期:

 alter user user_name identified by new_password account unlock; 

在其他答案状态下,适当地更改用户的configuration文件(例如“DEFAULT”configuration文件)将导致一旦设置的密码永不过期。

但是,正如一位评论者指出的那样,在configuration文件的旧值下面设置的密码可能已经过期,并且(如果在configuration文件指定的宽限期之后)该帐户被locking。

具有locking帐户的过期密码解决scheme(如应答注释中提供的)是使用ALTER USER命令的一个版本:

 ALTER USER xyz_user ACCOUNT UNLOCK; 

但是,解锁命令仅适用于帐户实际上被locking的帐户,但不适用于处于宽限期的帐户(密码已过期但帐户尚未locking)。 对于这些帐户,必须使用另一版本的ALTER USER命令重置密码:

 ALTER USER xyz_user IDENTIFIED BY new_password; 

下面是一个SQL * Plus脚本,一个特权用户(例如用户'SYS')可以用来将用户的密码重置为存储在数据库中的当前散列值。

 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 variable substitution expansion SET DEFINE '&' SHOW DEFINE REM Specify in a SQL*Plus variable the account to 'reset' 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 FROM DBA_USERS WHERE USERNAME = '&USER_NAME'; REM Create a SQL*Plus variable to hold the hash of existing password DEFINE OLD_PASSWORD = "" REM Tell SQL*Plus where to store the value to be selected with SQL COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD REM Select the old hash password as a delimited string SELECT '''' || PASSWORD || '''' AS PWORDHASH FROM SYS.USER$ WHERE NAME = '&USER_NAME'; REM Show the contents of the SQL*Plus variable DEFINE OLD_PASSWORD REM Reset the password ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD; 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 FROM DBA_USERS WHERE USERNAME = '&USER_NAME'; 

我相信,密码到期行为,默认情况下,永远不会过期。 但是,您可以为您的开发用户设置一个configuration文件,并设置PASSWORD_LIFE_TIME 。 有关更多详细信息,请参阅orafaq 。 你可以在这里看到一个人的angular度和用法的例子。

我会build议closures密码过期不是一个好主意,因为这可能会导致对数据的机密性,完整性和可用性的威胁。

但是如果你想的话。

如果你有适当的访问使用下面的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