Làm cách nào để tắt hết hạn mật khẩu Oracle?


177

Tôi đang sử dụng Oracle để phát triển. Mật khẩu cho tài khoản bootstrap mà tôi luôn sử dụng để xây dựng lại cơ sở dữ liệu của mình đã hết hạn.

Làm cách nào để tắt hết hạn mật khẩu cho người dùng này (và tất cả người dùng khác) vĩnh viễn?

Tôi đang sử dụng Oracle 11g, có mật khẩu hết hạn theo mặc định.


Tôi nghĩ rằng bạn có thể tốt hơn khi hỏi điều này trên serverfault.com. Tôi sẽ không ép buộc vì bạn đã nói rằng bạn đang sử dụng nó để phát triển và tôi nghĩ vẫn có cơ hội ai đó ở đây sẽ biết và / hoặc những người khác ở đây có thể được hưởng lợi từ thông tin này.
Bill the Lizard

Tôi nghĩ rằng tôi sẽ làm điều đó. Tôi đã tranh luận về trang web nào phù hợp hơn, vì đó là một câu hỏi cơ sở dữ liệu cơ bản và không phải là một điều DBA.
Josh Kodroff

Không chắc chính sách dupe là gì đối với các câu hỏi chéo trang, nhưng đây là liên kết: serverfault.com/questions/37622/ợi
Josh Kodroff

Câu trả lời:


313

Để thay đổi chính sách hết hạn mật khẩu cho một hồ sơ người dùng nhất định trong Oracle, trước tiên hãy kiểm tra hồ sơ nào người dùng đang sử dụng:

select profile from DBA_USERS where username = '<username>';

Sau đó, bạn có thể thay đổi giới hạn để không bao giờ hết hạn bằng cách sử dụng:

alter profile <profile_name> limit password_life_time UNLIMITED;

Nếu trước đây bạn muốn kiểm tra giới hạn bạn có thể sử dụng:

select resource_name,limit from dba_profiles where profile='<profile_name>';

5
Điều này đã thay đổi hồ sơ. Tuy nhiên, tôi có người dùng có mật khẩu được đặt hết hạn vì cấu hình mặc định có như vậy khi họ được tạo. Làm cách nào để thay đổi các tài khoản người dùng này để mật khẩu không hết hạn?
Jay Imerman

14
select username,expiry_date,account_status from dba_users; để xem tài khoản_status. đối với những tài khoản hết hạn, bạn có thể cần đặt lại mật khẩu một lần cho lần cuối.
Will Wu

6
thay đổi người dùng mở khóa tài khoản aaa;
Kalpesh Soni

1
Để hoàn thiện, nếu bạn cần thay đổi người dùng sang hồ sơ khác : ALTER USER Bob PROFILE MyNonExpiringProfile;.

không có hàng nào được chọn trên truy vấn "chọn hồ sơ từ DBA_USERS nơi tên người dùng = '<tên người dùng>';"
gaurav

90

Để phát triển, bạn có thể tắt chính sách mật khẩu nếu không có cấu hình nào khác được đặt (nghĩa là vô hiệu hóa hết hạn mật khẩu theo mặc định):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

Sau đó, đặt lại mật khẩu và mở khóa tài khoản người dùng. Nó sẽ không bao giờ hết hạn một lần nữa:

alter user user_name identified by new_password account unlock;

40

Như các câu trả lời khác nêu rõ, việc thay đổi hồ sơ người dùng (ví dụ: hồ sơ 'DEFAULT') sẽ dẫn đến mật khẩu, một khi được đặt, sẽ không bao giờ hết hạn.

Tuy nhiên, như một người bình luận chỉ ra, mật khẩu được đặt dưới các giá trị cũ của hồ sơ có thể đã hết hạn và (nếu sau thời gian ân hạn được chỉ định của hồ sơ), tài khoản sẽ bị khóa.

Giải pháp cho mật khẩu đã hết hạn với các tài khoản bị khóa (như được cung cấp trong một bình luận trả lời) là sử dụng một phiên bản của lệnh ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK;

Tuy nhiên, lệnh mở khóa chỉ hoạt động đối với các tài khoản mà tài khoản thực sự bị khóa, nhưng không áp dụng cho các tài khoản đang trong thời gian gia hạn, tức là khi mật khẩu hết hạn nhưng tài khoản chưa bị khóa. Đối với các tài khoản này, mật khẩu phải được đặt lại bằng một phiên bản khác của lệnh ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password;

Dưới đây là một tập lệnh SQL * Plus nhỏ mà người dùng đặc quyền (ví dụ: người dùng 'SYS') có thể sử dụng để đặt lại mật khẩu của người dùng về giá trị băm hiện tại được lưu trữ trong cơ sở dữ liệu.

EDIT: Các phiên bản cũ hơn của Oracle lưu trữ mật khẩu hoặc mật khẩu băm trong cột pword, các phiên bản mới hơn của Oracle lưu trữ mật khẩu băm trong cột tùng4. Tập lệnh bên dưới đã thay đổi để thu thập các cột pword và phụ tùng4, nhưng để sử dụng cột phụ tùng 4 để thiết lập lại tài khoản của người dùng; sửa đổi khi cần thiết

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
Cảm ơn đã giúp đỡ. Thật khó để tìm một câu trả lời có liên quan. Mọi câu trả lời khác chỉ đề cập đến PASSWORD_LIFE_TIME.
sabertiger

Cột SYS.USER $ .PASSWORD sẽ chỉ chứa hàm băm của phiên bản mật khẩu không phân biệt chữ hoa chữ thường (chữ hoa?). Trong Oracle 11, trừ khi bạn đặt tham số hệ thống SEC_CASE_SENSITIVE_LOGON = FALSE, sẽ có một hàm băm dài hơn của mật khẩu phân biệt chữ hoa chữ thường trong cột SYS.USER $ .SPARE4.
Morbo

16

Tôi tin rằng theo mặc định, hành vi hết hạn mật khẩu là không bao giờ hết hạn. Tuy nhiên, bạn có thể thiết lập cấu hình cho bộ người dùng dev của mình và đặt PASSWORD_LIFE_TIME. Xem orafaq để biết thêm chi tiết. Bạn có thể xem ở đây để biết ví dụ về quan điểm và cách sử dụng của một người.


7
Tôi nghĩ rằng trong bản cài đặt 11g mới (trái ngược với bản nâng cấp) với bảo mật được cải thiện được đề xuất, mật khẩu sẽ mặc định hết hạn sau 30 ngày.
Gary Myers


0

Tôi sẽ đề nghị không nên tắt hết hạn mật khẩu vì nó có thể dẫn đến các mối đe dọa có thể đối với tính bảo mật, tính toàn vẹn và tính sẵn có của dữ liệu.

Tuy nhiên nếu bạn muốn như vậy.

Nếu bạn có quyền truy cập phù hợp, hãy sử dụng SQL sau

CHỌN tên người dùng, tài khoản_status TỪ dba_users;

Điều này sẽ cung cấp cho bạn kết quả như thế này.

   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

Bây giờ bạn có thể sử dụng câu trả lời Pedro Carriço https://stackoverflow.com/a/6777079/2432468


Mặc dù tôi đồng ý rằng việc vô hiệu hóa hết hạn mật khẩu trong môi trường sản xuất, chúng tôi có thể muốn tắt nó trong Phát triển hoặc Thử nghiệm.
APC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.