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

133

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

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

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

  • 0
    Я думаю, вам лучше спросить об этом на serverfault.com. Я не собираюсь форсировать это, потому что вы сказали, что используете это для разработки, и я думаю, что есть шанс, что кто-то здесь узнает, и / или другие здесь могут извлечь выгоду из этой информации.
  • 0
    Я думаю, что я сделаю именно это. Я обсуждал, для какого сайта он больше подходит, так как это базовый вопрос о базе данных, а не вопрос DBA.
Показать ещё 1 комментарий
Теги:
security

5 ответов

259
Лучший ответ

Чтобы изменить политику истечения срока действия пароля для определенного профиля пользователя в 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>';
  • 4
    Это изменило профиль. Тем не менее, у меня есть пользователи, чьи пароли имеют срок действия, потому что профиль по умолчанию имел его при создании. Как изменить эти учетные записи, чтобы срок действия пароля не истек?
  • 11
    select username,expiry_date,account_status from dba_users; для просмотра account_status. для тех аккаунтов, срок действия которых истекает, вам может понадобиться сбросить пароль один раз в последний раз.
Показать ещё 2 комментария
71

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

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

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

alter user user_name identified by new_password account unlock;
31

Как утверждают другие ответы, изменение профиля пользователя (например, профиль "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';
  • 1
    Спасибо за помощь. Это так сложно найти соответствующий ответ. Любой другой ответ относится только к PASSWORD_LIFE_TIME.
  • 0
    Столбец SYS.USER $ .PASSWORD будет содержать только хэш версии пароля без учета регистра (в верхнем регистре?). В Oracle 11, если вы не установите системный параметр SEC_CASE_SENSITIVE_LOGON = FALSE, в столбце SYS.USER $ .SPARE4 будет хэшировать пароль с учетом регистра.
Показать ещё 1 комментарий
16

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

  • 7
    Я думаю, что в новой версии 11g (в отличие от обновления) с рекомендуемой улучшенной безопасностью пароли по умолчанию истекают через 30 дней.
  • 1
    На 11g это 180 дней: docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/…
1

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

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

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

Теперь вы можете использовать ответ Педро Каррису https://stackoverflow.com/questions/1095871/how-do-i-turn-off-oracle-password-expiration

Ещё вопросы

Сообщество Overcoder
Наверх
Меню