2009-07-08 4 views
145

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

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

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

+0

Я думаю, что вы могли бы быть лучше спрашивать это на serverfault.com. Я не собираюсь это заставлять, потому что вы сказали, что используете его для развития, и я думаю, что есть еще шанс, который кто-то из вас узнает, и/или другие могут извлечь выгоду из этой информации. –

+0

Думаю, я сделаю именно это. Я обсуждал, на каком сайте он более подходит, поскольку это основной вопрос с базой данных и не столько вещь DBA. –

+0

Не знаете, в чем заключается политика обмана для кросс-сайтов, но вот ссылка: http://serverfault.com/questions/37622/how-do-i-turn-off-oracle-password-expiration –

ответ

253

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

Это изменило профиль. Тем не менее, у меня есть пользователи, чьи пароли устарели, потому что профиль по умолчанию имел его как таковой, когда они были созданы. Как изменить эти учетные записи пользователей, чтобы пароль не истекал? –

+9

'выберите имя пользователя, expiry_date, account_status из dba_users;' , чтобы просмотреть account_status. для истечения срока действия учетной записи, вам может потребоваться сбросить пароль один раз в последний раз. –

+4

изменить учетную запись пользователя aaa; –

16

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

+7

Я думаю, что в свежая установка 11g (в отличие от обновления) с рекомендованной улучшенной безопасностью, пароли по умолчанию истекают через 30 дней. –

+1

На 11g это 180 дней: http://docs.oracle.com/cd/E38689_01/pt853pbr0/rus/pt/tadm/task_WorkingWithOracle11gSecurityFeatures-3e78fd.html –

77

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

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL; 

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

alter user user_name identified by new_password account unlock; 
+0

Спасибо, что работает просто приятно! – grep

32

Как государства и другие ответы, изменения профиля пользователя (например, «Настройка по умолчанию» профиль) соответственно приведет к паролям, что когда-то установить, никогда не закончится.

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

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

ALTER USER xyz_user ACCOUNT UNLOCK; 

Однако команда разблокировки работает только для учетных записей, где учетная запись является фактически заблокирован, но не для тех учетных записей, которые находятся в льготном периоде, когда пароль истек, но учетная запись еще не заблокирована. Для этих счетов необходимо сменить пароль с другой версией команды 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'; 
+0

Очень приятно, спасибо – dreyln

+1

Спасибо за помощь. Трудно найти соответствующий ответ. Каждый другой ответ относится только к PASSWORD_LIFE_TIME. – sabertiger

+0

В столбце SYS.USER $ .PASSWORD будет содержаться только хэш нечувствительной к регистру (в верхнем регистре?) Версии пароля. В Oracle 11, если вы не установили системный параметр SEC_CASE_SENSITIVE_LOGON = FALSE, в столбце SYS.USER $ .SPARE4 будет намного длиннее хэш пароля, чувствительного к регистру. – Morbo

1

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

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

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

ВЫБРАТЬ имя пользователя, 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 

Теперь вы можете использовать Pedro Carriço ответить https://stackoverflow.com/a/6777079/2432468