Как отключить срок действия пароля Oracle?

Я использую Oracle для разработки. Пароль для начальной загрузки, который я всегда использую для восстановления моей базы данных, истек.

Как отключить срок действия пароля для этого пользователя (и всех других пользователей) на постоянной основе?

Я использую Oracle 11g, у которого есть пароли по умолчанию.

Ответ 1

Чтобы изменить политику истечения срока действия пароля для определенного профиля пользователя в 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>';

Ответ 2

Для разработки вы можете отключить политику паролей, если другой профиль не задан (т.е. выключение срока действия пароля по умолчанию):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

Затем reset пароль и разблокируйте учетную запись пользователя. Он никогда не должен истекать снова:

alter user user_name identified by new_password account unlock;

Ответ 3

Как утверждают другие ответы, изменение профиля пользователя (например, профиль "DEFAULT" ) приведет к тому, что пароли, которые после этого будут установлены, никогда не истекут.

Однако, как отмечает один из комментаторов, пароли, установленные под старыми значениями профиля, могут быть истекли и (если после того, как указанный период льготного периода профиля), учетная запись заблокирована.

Решение для истекших паролей с заблокированными учетными записями (как указано в ответе на комментарий) заключается в использовании одной версии команды ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK;

Однако команда unlock работает только для учетных записей, в которых фактически заблокирована учетная запись, но не для тех учетных записей, которые находятся в льготном периоде, когда пароль истек, но учетная запись еще не заблокирована. Для этих учетных записей пароль должен быть reset с другой версией команды ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password;

Ниже немного SQL * Plus script, что привилегированный пользователь (например, пользовательский "SYS" ) может использовать для reset пароль пользователя для текущего существующего хешированного значения, хранящегося в базе данных.

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

Ответ 4

Я считаю, что поведение по истечении срока действия пароля по умолчанию никогда не истекает. Однако вы можете настроить профиль для своего пользовательского набора dev и установить PASSWORD_LIFE_TIME. Подробнее см. orafaq. Вы можете увидеть здесь для примера перспективы и использования одного человека.

Ответ 5

Я предлагаю не помешать отключить срок действия пароля, поскольку это может привести к возможным угрозам конфиденциальности, целостности и доступности данных.

Однако, если вы этого хотите.

Если у вас есть правильное использование доступа после 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

Теперь вы можете использовать ответ Педро Каррису fooobar.com/info/43022/...