Як вимкнути термін дії пароля Oracle?


177

Я використовую Oracle для розробки. Термін дії облікового запису для завантаження, який я завжди використовую для відновлення бази даних, закінчився.

Як я назавжди вимкнути термін дії пароля для цього користувача (та всіх інших користувачів)?

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


Я думаю, вам може бути краще запитати це на сервері defaultfault.com. Я не збираюся це змушувати, тому що ви сказали, що використовуєте його для розвитку, і я думаю, що є ще ймовірність, що хтось тут дізнається та / або інші тут можуть скористатися цією інформацією.
Білл Ящірка

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

Не впевнений, що стосується політики обміну
Джош Кодрофф

Відповіді:


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; для перегляду рахунку_status. для тих облікових записів, що закінчуються, вам може знадобитися скинути пароль один раз востаннє.
Буде Ву

6
змінити розблокування облікового запису користувача aaa;
Kalpesh Soni

1
Для повноти картини , якщо вам потрібно змінити користувача на інший профіль: ALTER USER Bob PROFILE MyNonExpiringProfile;.

у запиті немає вибраних рядків "вибрати профіль із DBA_USERS, де ім'я користувача = '<ім'я користувача>';"
gaurav

90

Для розробки можна вимкнути політику щодо паролів, якщо не встановлено інший профіль (тобто вимкнути термін дії пароля за умовчанням):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

Потім скиньте пароль та розблокуйте обліковий запис користувача. Він більше ніколи не повинен закінчуватися:

alter user user_name identified by new_password account unlock;

40

Як зазначено в інших відповідях, зміна профілю користувача (наприклад, профіль DEFAULT) належним чином призведе до паролів, які встановлені після встановлення, ніколи не закінчуються.

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

Рішення для паролів із минулим терміном дії із заблокованими обліковими записами (як це передбачено у коментарі у відповіді) полягає у використанні однієї версії команди ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK;

Однак команда unlock працює лише для тих облікових записів, де обліковий запис фактично заблоковано, але не для тих облікових записів, які перебувають у пільговому періоді, тобто коли термін дії пароля минув, але рахунок ще не заблокований. Для цих облікових записів пароль потрібно скинути за допомогою іншої версії команди ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password;

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

EDIT: Старіші версії Oracle зберігають пароль або хеш паролів у стовпці pword, а новіші версії Oracle зберігають хеш паролів у колонці rezer4. Сценарій нижче змінено, щоб зібрати колонки pword та rezer4, але використовувати стовпчик rezer4 для скидання облікового запису користувача; змінювати за потребою.

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.
sabertiger

Стовпець SYS.USER $ .PASSWORD міститиме лише хеш-версію пароля, що не враховує регістр (верхній регістр?). У Oracle 11, якщо ви не встановите системний параметр SEC_CASE_SENSITIVE_LOGON = FALSE, у стовпці SYS.USER $ .SPARE4 буде набагато довший хеш-регістр пароля.
Морбо

16

Я вважаю, що за замовчуванням термін дії терміну дії пароля ніколи не закінчується. Однак ви можете налаштувати профіль для свого розробника та встановити PASSWORD_LIFE_TIME. Дивіться orafaq для більш детальної інформації. Ви можете побачити тут для прикладу перспективи і використання однієї людини.


7
Я думаю, що в новому встановленні 11 г (на відміну від оновлення) з рекомендованою покращеною безпекою паролі за замовчуванням закінчуються через 30 днів.
Гері Майєрс


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

Тепер ви можете використовувати відповідь Pedro Carriço https://stackoverflow.com/a/6777079/2432468


Хоча я згоден, забороняється вимкнути термін дії пароля у виробничих середовищах, можливо, ми хочемо вимкнути його в програмі розробки або тестування.
APC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.