Oracle Database là một trong những hệ quản trị cơ sở dữ liệu phổ biến nhất hiện nay. Với sự phát triển của công nghệ, nguy cơ lỗ hổng bảo mật trong hệ thống cũng tăng cao hơn. Vì vậy, việc tìm hiểu và áp dụng các tính năng bảo mật trong Oracle Database là rất cần thiết.
Trong bài viết này, chúng ta sẽ tìm hiểu về Profiles user, các tính năng bảo mật mật khẩu và nguyên lý ít quyền trong Oracle Database. Chúng ta sẽ hiểu rõ hơn về cách cấu hình và sử dụng các tính năng này để giảm thiểu nguy cơ bảo mật và tăng cường an ninh cho hệ thống của bạn
Profiles của user trong Oracle Database
Profile user trong Oracle Database là một tập hợp các giới hạn tài nguyên được đặt tên cho việc sử dụng cơ sở dữ liệu và tài nguyên của hệ thống. Profile user cũng quản lý trạng thái tài khoản và giới hạn mật khẩu của người dùng (độ dài, thời gian hết hạn, v.v.).
Mỗi người dùng được gán một profile user và chỉ có thể thuộc về một profile user tại bất kỳ thời điểm nào. Nếu người dùng đã đăng nhập trước khi bạn thay đổi profile user của họ, thì thay đổi đó sẽ không có hiệu lực cho đến khi lần đăng nhập tiếp theo. Profile user mặc định được sử dụng làm cơ sở cho tất cả các profile user khác.
Profile user có thể áp dụng giới hạn tài nguyên trực tiếp (như CPU/Session), không giới hạn (như CPU/Call) hoặc có thể tham chiếu đến cài đặt mặc định của profile user (như Connect Time). Tuy nhiên, profile user không thể áp dụng giới hạn tài nguyên cho người dùng trừ khi tham số khởi tạo RESOURCE_LIMIT được đặt thành TRUE. Nếu RESOURCE_LIMIT giữ giá trị mặc định là FALSE, giới hạn tài nguyên của profile user sẽ bị bỏ qua. Các cài đặt mật khẩu của profile user luôn được áp dụng.
Profile user cho phép quản trị viên kiểm soát các tài nguyên hệ thống sau:
CPU
Tài nguyên CPU có thể được giới hạn trên cơ sở từng phiên hoặc từng cuộc gọi. Giới hạn CPU/Session là 1.000 có nghĩa là nếu bất kỳ phiên nào sử dụng profile user này tiêu thụ hơn 10 giây thời gian CPU (giới hạn thời gian CPU được tính bằng phần trăm giây), phiên đó sẽ nhận được một lỗi và bị đăng xuất: ORA-02392: exceeded session limit on CPU usage, you are being logged off.
Giới hạn tổng thể trên mỗi cuộc hội thoại (per-call) có tác dụng tương tự nhưng thay vì giới hạn phiên làm việc tổng thể của người dùng, nó ngăn cản bất kỳ lệnh đơn lẻ nào tiêu thụ quá nhiều CPU. Nếu CPU/Call bị giới hạn và người dùng vượt quá giới hạn, lệnh sẽ bị hủy bỏ. Người dùng sẽ nhận được thông báo lỗi như sau: ORA-02393: exceeded call limit on CPU usage.
Mỗi phiên kết nối với cơ sở dữ liệu sẽ tiêu thụ tài nguyên bộ nhớ hệ thống và (nếu phiên đó là từ người dùng không địa phương đến máy chủ) tài nguyên mạng. Bạn có thể chỉ định các thông số sau:
Thời gian kết nối (Connect Time): cho biết trong bao nhiêu phút một người dùng có thể kết nối trước khi bị đăng xuất tự động.
Thời gian chờ (Idle Time): cho biết trong bao nhiêu phút một phiên của người dùng có thể giữ im lặng trước khi bị đăng xuất tự động. Thời gian chờ được tính cho quá trình máy chủ (server process) và không tính đến hoạt động của ứng dụng. Giới hạn IDLE_TIME không bị ảnh hưởng bởi các truy vấn và thao tác chạy lâu.
Số phiên đồng thời (Concurrent Sessions): chỉ ra số lượng phiên đồng thời có thể được tạo bằng cách sử dụng tài khoản người dùng cơ sở dữ liệu.
SGA riêng (Private SGA): giới hạn lượng không gian được tiêu thụ trong Khu vực Toàn cầu Hệ thống (SGA) để sắp xếp, gộp các bitmap, v.v. Ràng buộc này chỉ có tác dụng nếu phiên sử dụng máy chủ chia sẻ. (Máy chủ chia sẻ được bàn về trong bài học có tiêu đề "Cấu hình Môi trường Mạng Oracle.")
I/O đĩa (Disk I/O)
giới hạn lượng dữ liệu mà một người dùng có thể đọc ở cấp độ trên mỗi phiên hoặc cấp độ per-call. Reads/Session và Reads/Call đặt giới hạn về tổng số lần đọc từ bộ nhớ và đĩa. Điều này có thể được thực hiện để đảm bảo không
Profile trong Oracle Database cho phép đặt giới hạn tài nguyên cho việc sử dụng cơ sở dữ liệu và nguồn tài nguyên trên hệ thống. Nó cũng quản lý trạng thái tài khoản và giới hạn mật khẩu người dùng (độ dài, thời gian hết hạn, v.v.). Mỗi người dùng được gán một profile và chỉ có thể thuộc về một profile tại bất kỳ thời điểm nào. Profile mặc định được sử dụng làm cơ sở cho tất cả các profile khác.
Profile còn cho phép quản trị viên kiểm soát các tài nguyên hệ thống như CPU, mạng/máy nhớ, phiên kết nối, đọc ghi đĩa, v.v. Nó cũng cho phép tạo hạn chế kết hợp, dựa trên tổ hợp có trọng số của CPU/Session, Reads/Session, Thời gian kết nối và Khu vực Private SGA.
Để tạo một profile bằng Enterprise Manager Database Express, bạn có thể làm theo các bước sau: Chọn Profiles trong menu Security -> chọn Create Profile -> nhập tên profile và giá trị tài nguyên trên trang General -> nhập mật khẩu trên trang Password và nhấp OK để tạo profile.
Chú ý, Resource Manager là một lựa chọn thay thế cho nhiều cài đặt profile. Để biết thêm chi tiết về Resource Manager, xem Oracle Database Administrator's Guide.
Triển khai các tính năng bảo mật mật khẩu trong Oracle Database

Oracle sử dụng các user profiles để quản lý mật khẩu và bảo mật tài khoản người dùng. Các tính năng bảo mật chuẩn có thể được cung cấp thông qua profiles như:
- Account locking: cho phép khóa tài khoản tự động trong một khoảng thời gian nhất định khi người dùng không đăng nhập vào hệ thống sau số lần đăng nhập không thành công đã được chỉ định.
- Password aging và expiration: cho phép mật khẩu người dùng tồn tại trong một khoảng thời gian nhất định, sau đó mật khẩu sẽ hết hạn và phải được thay đổi.
Để quản lý các tính năng này, có thể sử dụng các thuộc tính như FAILED_LOGIN_ATTEMPTS để xác định số lần đăng nhập không thành công trước khi khóa tài khoản hoặc PASSWORD_LIFE_TIME để xác định khoảng thời gian tồn tại của mật khẩu.
Ngoài ra, bạn cũng có thể tham khảo thêm 2 tham số sau để tăng cường khả năng bảo mật cho mật khẩu:
PASSWORD_LOCK_TIME: Tham số này xác định số ngày mà tài khoản bị khóa sau khi vượt quá số lần đăng nhập không thành công (được chỉ định bởi tham số FAILED_LOGIN_ATTEMPTS). Sau khi tài khoản bị khóa, người dùng sẽ không thể đăng nhập vào tài khoản đó trong khoảng thời gian được chỉ định bởi tham số PASSWORD_LOCK_TIME.
PASSWORD_GRACE_TIME: Tham số này xác định khoảng thời gian (theo số ngày) cho phép người dùng thay đổi mật khẩu sau khi mật khẩu của họ đã hết hạn và họ đã đăng nhập thành công lần đầu tiên. Nếu người dùng không thay đổi mật khẩu trong khoảng thời gian được chỉ định, tài khoản của họ sẽ bị khóa.
Tuy nhiên, cần lưu ý rằng việc hết hạn mật khẩu và khóa các tài khoản như SYS, SYSMAN và DBSNMP có thể ảnh hưởng đến việc sử dụng Enterprise Manager. Do đó, các ứng dụng phải xử lý thông báo "password expired" và thực hiện thay đổi mật khẩu tránh bị khóa tài khoản.
Password history
Ngoài việc quản lý mật khẩu trong Oracle thông qua các cấu hình profile. Các tính năng bảo mật chuẩn được cung cấp bao gồm khóa tài khoản, hạn chế thời gian sử dụng mật khẩu, kiểm tra lịch sử mật khẩu,.v.v.. thì các tham số PASSWORD_REUSE_TIME và PASSWORD_REUSE_MAX được sử dụng để kiểm tra tính đa dạng của mật khẩu mới.
Chúng quy định rằng mật khẩu mới không được phép tái sử dụng trong một khoảng thời gian cụ thể hoặc sau một số lần thay đổi mật khẩu. Nếu cả hai tham số đều được đặt là UNLIMITED, người dùng có thể tái sử dụng mật khẩu bất cứ lúc nào.
Nếu một tham số được đặt là một số còn tham số kia là UNLIMITED, người dùng sẽ không bao giờ có thể tái sử dụng mật khẩu. Nếu cả hai tham số đều có giá trị, người dùng chỉ có thể tái sử dụng mật khẩu sau khi đã thay đổi mật khẩu đủ số lần và đợi đủ thời gian quy định.
Ví dụ, với hồ sơ của người dùng ALFRED, PASSWORD_REUSE_MAX được đặt là 10 và PASSWORD_REUSE_TIME được đặt là 30. Người dùng ALFRED không thể sử dụng lại mật khẩu cho đến khi đã đổi mật khẩu 10 lần và 30 ngày đã trôi qua kể từ lần cuối cùng sử dụng mật khẩu cũ.
Password complexity verification
là quá trình kiểm tra tính phức tạp của mật khẩu để đảm bảo rằng nó đáp ứng những quy tắc nhất định. Kiểm tra này phải đảm bảo rằng mật khẩu đủ phức tạp để bảo vệ khỏi kẻ xâm nhập có thể cố gắng đoán mật khẩu để đột nhập vào hệ thống.
Tham số PASSWORD_VERIFY_FUNCTION đặt tên cho một hàm PL/SQL thực hiện kiểm tra tính phức tạp của mật khẩu trước khi mật khẩu được gán. Các hàm xác thực mật khẩu phải thuộc sở hữu của người dùng SYS và phải trả về giá trị Boolean (TRUE hoặc FALSE).
Một hàm kiểm tra tính phức tạp mật khẩu mẫu được cung cấp trong tập lệnh utlpwdmg.sql được tìm thấy trong các thư mục sau:
• Nền tảng UNIX và Linux: $ORACLE_HOME/rdbms/admin
• Nền tảng Windows: %ORACLE_HOME%\rdbms\admin.Tạo password profile
Bạn có thể chọn các giá trị chung cho các thiết lập từ một danh sách giá trị, hoặc bạn có thể nhập giá trị tùy chỉnh. Các khoảng thời gian đều được thể hiện bằng đơn vị ngày, nhưng cũng có thể được biểu diễn dưới dạng phân số. Có 1.440 phút trong một ngày; do đó, 5/1.440 tương đương với năm phút.
Enterprise Manager cũng có thể được sử dụng để chỉnh sửa các hồ sơ mật khẩu hiện có. Nếu file script utlpwdmg.sql đã được thực thi, các hàm VERIFY_FUNCTION_11G, ORA12C_VERIFY_FUNCTION và ORA12C_STRONG_VERIFY_FUNCTION sẽ có sẵn trong database.
Nếu bạn đã tạo chức năng phức tạp của riêng mình, tên của chức năng đó có thể được nhập. Tên chức năng không xuất hiện trong danh sách chọn. Nếu chức năng gây ra lỗi thời gian chạy, người dùng sẽ không thể thay đổi mật khẩu.
Trong Enterprise Manager, bạn không thể xóa một hồ sơ mật khẩu được sử dụng bởi người dùng. Tuy nhiên, nếu bạn xóa một hồ sơ mật khẩu với tùy chọn CASCADE (ví dụ, trong SQL * Plus), tất cả các người dùng có hồ sơ đó sẽ tự động được gán cho hồ sơ DEFAULT.
Chức năng xác minh mật khẩu
Bạn có thể tạo các hàm xác minh mật khẩu sau bằng cách thực thi tập lệnh utlpwdmg.sql:
- ORA12C_VERIFY_FUNCTION: Hàm này thực hiện các kiểm tra độ phức tạp tối thiểu, chẳng hạn như kiểm tra độ dài mật khẩu tối thiểu và mật khẩu không được giống với tên người dùng.
- ORA12C_STRONG_VERIFY_FUNCTION: Hàm này cung cấp một hàm độ phức tạp mật khẩu mạnh hơn, lấy ý kiến từ Hướng dẫn Triển khai Kỹ thuật Bảo mật Cơ sở dữ liệu của Bộ Quốc phòng Hoa Kỳ.
- VERIFY_FUNCTION_11G: Hàm này thực hiện các kiểm tra độ phức tạp tối thiểu, chẳng hạn như kiểm tra độ dài mật khẩu tối thiểu và mật khẩu không được giống với tên người dùng. Hàm này được cung cấp với Oracle Database 11g.
Lưu ý: Các hàm phải được sở hữu bởi người dùng SYS. Việc kiểm tra độ phức tạp mật khẩu không được áp dụng cho người dùng SYS.
Ngoài việc tạo các hàm như được hiển thị ở trên, kịch bản utlpwdmg cũng thay đổi DEFAULT profile bằng lệnh ALTER PROFILE sau đây:
ALTER PROFILE default LIMIT
PASSWORD_LIFE_TIME 180
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
Lưu ý rằng khi người dùng được tạo ra, họ sẽ được gán cho DEFAULT profile trừ khi có một profile khác được chỉ định.
Assiging Quotas to users
Quota là một khoảng trống(space) được cấp phép trong một tablespace nhất định. Mặc định, người dùng không có quota trên bất kỳ tablespaces nào. Bạn có ba tùy chọn để cung cấp quota cho một người dùng trên một tablespace.
- Unlimited: Cho phép người dùng sử dụng bao nhiêu không gian còn lại trong tablespace.
- Value: Số kilobyte hoặc megabyte mà người dùng có thể sử dụng. Điều này không đảm bảo rằng không gian được cung cấp cho người dùng. Giá trị này có thể lớn hơn hoặc nhỏ hơn so với không gian hiện có trong tablespace.
- UNLIMITED TABLESPACE system privilege: Ghi đè lên tất cả các quota của các tablespace cá nhân và cung cấp quota không giới hạn cho người dùng trên tất cả các tablespaces, bao gồm cả SYSTEM và SYSAUX. Quyền này phải được cấp cẩn thận.
Bạn không nên cung cấp quota cho người dùng trên các tablespace của hệ thống như SYSTEM hoặc SYSAUX. Thông thường, chỉ các người dùng SYS và SYSTEM mới có thể tạo đối tượng trong các tablespaces SYSTEM hoặc SYSAUX.
Bạn không cần quota trên các tablespace tạm thời được chỉ định hoặc bất kỳ tablespace undo nào. Bạn không cần phải có quota để chèn, cập nhật và xóa dữ liệu trong cơ sở dữ liệu Oracle. Chỉ có các tài khoản sở hữu đối tượng cơ sở dữ liệu mới cần quota.
Thông thường khi cài đặt mã ứng dụng, người cài đặt sẽ tạo tài khoản cơ sở dữ liệu để sở hữu các đối tượng. Chỉ các tài khoản này mới cần quota. Người dùng cơ sở dữ liệu khác có thể được cấp quyền để sử dụng các đối tượng này mà không cần quota.
- Oracle server kiểm tra hạn mức (quota) khi một người dùng tạo hoặc mở rộng một phân đoạn.
- Đối với các hoạt động được gán cho một schema người dùng, chỉ các hoạt động sử dụng không gian trong một tablespace được tính vào hạn mức. Các hoạt động không sử dụng không gian trong tablespace được gán không ảnh hưởng đến hạn mức (ví dụ như tạo view hoặc sử dụng tablespace tạm thời).
Áp dụng nguyên lý ít quyền trong Oracle Database
Nguyên tắc quyền ít nhất có nghĩa là một người dùng chỉ được cấp những quyền cần thiết để hoàn thành công việc một cách hiệu quả. Điều này giúp giảm khả năng người dùng sửa đổi hoặc xem dữ liệu (vô tình hoặc cố ý) mà họ không có quyền để sửa đổi hoặc xem.
Bảo vệ Data Dicitionary: Tham số O7_DICTIONARY_ACCESSIBILITY được đặt theo mặc định là FALSE. Bạn không được phép cho phép thay đổi tham số này mà không có lý do chính đáng bởi vì nó ngăn người dùng có quyền hệ thống ANY TABLE truy cập các table data dictionary database. Nó cũng đảm bảo rằng người dùng SYS chỉ có thể đăng nhập với quyền SYSDBA.
Thu hồi quyền không cần thiết từ PUBLIC: Một số package rất hữu ích đối với các ứng dụng cần chúng, nhưng yêu cầu cấu hình chính xác để sử dụng an toàn. PUBLIC được cấp quyền thực thi trên các package sau: UTL_SMTP, UTL_TCP, UTL_HTTP và UTL_FILE.
Kiểm soát truy cập mạng: Trong Oracle Database, truy cập mạng được kiểm soát bằng danh sách kiểm soát truy cập (ACL) có thể được cấu hình để cho phép một số người dùng truy cập vào các dịch vụ mạng cụ thể. Mặc định, truy cập mạng bị từ chối. Phải tạo ACL để cho phép truy cập mạng. Truy cập tập tin thông qua UTL_FILE được kiểm soát ở hai cấp độ:
- Ở mức hệ thống, quyền truy cập vào tập tin và thư mục được điều khiển bằng các quyền hạn.
- Trong cơ sở dữ liệu, quyền truy cập vào hệ thống tệp thông qua đối tượng DIRECTORY cho phép truy cập vào thư mục hệ thống tệp cụ thể. Đối tượng DIRECTORY có thể được cấp quyền cho người dùng để đọc hoặc đọc và ghi. Việc điều khiển quyền thực thi trên các gói PL/SQL khác cần được kiểm soát cẩn thận.
Các package mạnh mẽ hơn có thể bị lạm dụng bao gồm:
- UTL_SMTP: Cho phép gửi các thông điệp email tùy ý bằng cách sử dụng cơ sở dữ liệu làm máy chủ thư đơn giản (SMTP). Sử dụng ACL để kiểm soát các máy được truy cập bởi người dùng nào.
- UTL_TCP: Cho phép thiết lập các kết nối mạng đi ra bởi máy chủ cơ sở dữ liệu đến bất kỳ dịch vụ mạng nào đang chờ đợi hoặc đang nhận. Do đó, dữ liệu tùy ý có thể được gửi giữa máy chủ cơ sở dữ liệu và bất kỳ dịch vụ mạng nào đang chờ đợi. Sử dụng ACL để kiểm soát quyền truy cập.
- UTL_HTTP: Cho phép máy chủ cơ sở dữ liệu yêu cầu và lấy dữ liệu thông qua HTTP. Cấp quyền gói này cho người dùng có thể cho phép dữ liệu được gửi qua các biểu mẫu HTML đến một trang web độc hại. Giới hạn quyền truy cập bằng cách sử dụng ACL.
- UTL_FILE: Nếu được cấu hình không đúng cách, cho phép truy cập cấp độ văn bản vào bất kỳ tệp nào trên hệ điều hành máy chủ. Khi được cấu hình đúng cách, gói này giới hạn quyền truy cập của người dùng vào các vị trí thư mục cụ thể.
Restrict access to OS directories: Đối tượng DIRECTORY trong cơ sở dữ liệu cho phép DBA ánh xạ thư mục với các đường dẫn hệ thống và cấp quyền trên các thư mục đó cho từng người dùng riêng biệt.
Giới hạn người dùng có quyền quản trị: Không cấp cho người dùng cơ sở dữ liệu quyền hơn những quyền cần thiết. Không cấp DBA role cho người dùng không phải quản trị viên. Để thực hiện nguyên tắc nguyên tắc ít quyền, hạn chế các loại quyền sau đây:
- Cấp quyền đối tượng và hệ thống
- Kết nối được quyền SYS của cơ sở dữ liệu, chẳng hạn như SYSDBA và SYSOPER
- Các quyền kiểu DBA khác, chẳng hạn như DROP ANY TABLE
Hạn chế xác thực cơ sở dữ liệu từ xa: Tham số REMOTE_OS_AUTHENT được đặt mặc định là FALSE. Nó không được thay đổi trừ khi tất cả các khách hàng có thể tin tưởng xác thực người dùng một cách thích hợp.
Trong quá trình xác thực từ xa:
- Người dùng cơ sở dữ liệu được xác thực bên ngoài
- Hệ thống từ xa xác thực người dùng
- Người dùng đăng nhập vào cơ sở dữ liệu mà không cần xác thực thêm
Lưu ý: Luôn kiểm tra kỹ ứng dụng của bạn nếu bạn đã thu hồi quyền.
BÀI VIẾT LIÊN QUAN