Как отключить срок действия пароля 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/...