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

177

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

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

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

Джош Кодрофф
источник
Я думаю, вам лучше спросить об этом на serverfault.com. Я не собираюсь форсировать это, потому что вы сказали, что используете это для разработки, и я думаю, что есть шанс, что кто-то здесь узнает, и / или другие здесь могут извлечь выгоду из этой информации.
Билл Ящерица
Я думаю, что я сделаю именно это. Я размышлял, для какого сайта он больше подходит, так как это базовый вопрос базы данных, а не вопрос DBA.
Джош Кодрофф
Не уверен, какова политика дублирования для межсайтовых вопросов, но вот ссылка: serverfault.com/questions/37622/…
Джош Кодрофф,

Ответы:

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
Это изменило профиль. Тем не менее, у меня есть пользователи, чьи пароли имеют срок действия, потому что профиль по умолчанию имел его при создании. Как изменить эти учетные записи, чтобы срок действия пароля не истек?
Джей Имерман
14
select username,expiry_date,account_status from dba_users; для просмотра account_status. для тех, у кого истекает срок действия учетной записи, вам может понадобиться сбросить пароль один раз в последний раз.
Будет Ву
6
изменить пользователя aaa разблокировка учетной записи;
Kalpesh Soni
1
Для полноты картины , если вам нужно изменить пользователя на другой профиль: ALTER USER Bob PROFILE MyNonExpiringProfile;.
в запросе не выбрано ни одной строки "выберите профиль из DBA_USERS, где username = '<username>';"
Гаурав
90

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

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

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

alter user user_name identified by new_password account unlock;
Шимон
источник
40

Поскольку другие ответы указывают, что изменение профиля пользователя (например, профиля «ПО УМОЛЧАНИЮ») приведет к тому, что пароли, которые после установки никогда не истекут.

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

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

ALTER USER xyz_user ACCOUNT UNLOCK;

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

ALTER USER xyz_user IDENTIFIED BY new_password;

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

РЕДАКТИРОВАТЬ: более старые версии Oracle хранят пароль или хэш пароля в столбце pword, более новые версии Oracle хранят хэш пароля в столбце spare4. Сценарий ниже изменен, чтобы собрать столбцы pword и spare4, но использовать столбец 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.
Sabretiger
Столбец SYS.USER $ .PASSWORD будет содержать только хэш версии пароля без учета регистра (в верхнем регистре?). В Oracle 11, если вы не установите системный параметр SEC_CASE_SENSITIVE_LOGON = FALSE, в столбце SYS.USER $ .SPARE4 будет хэшировать пароль с учетом регистра.
Морбо
16

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

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

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

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

Если у вас есть правильный доступ, используйте следующий SQL

ВЫБЕРИТЕ имя пользователя, account_status ОТ 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/a/6777079/2432468

Паван Кумар
источник
Хотя я согласен с тем, что отключать истечение срока действия пароля в производственной среде является опрометчивым, мы можем отключить его при разработке или тестировании.
APC