Quản trị quyền hạn (Privileges) trong Oracle Database là một phần quan trọng của bảo mật và quản lý cơ sở dữ liệu. Quyền hạn xác định những hành động mà người dùng hoặc Roles có thể thực hiện. Dưới đây là hướng dẫn chi tiết về cách quản trị quyền hạn trong Oracle Database.
1. Các Loại Quyền Hạn
Oracle Database chia quyền hạn thành hai loại chính:
- Hệ thống quyền hạn (System Privileges): Quyền này cho phép người dùng thực hiện các thao tác quản trị trên cơ sở dữ liệu, chẳng hạn như tạo bảng, người dùng hoặc sao lưu dữ liệu.
- Quyền hạn đối tượng (Object Privileges): Quyền này cho phép người dùng thực hiện các thao tác trên các đối tượng cụ thể như bảng, chế độ xem, trình tự, thủ tục, hàm và gói.
2. Quản Trị Quyền Hệ Thống (System Privileges)
Cấp Quyền Hệ Thống
GRANT system_privilege TO user_or_role; GRANT CREATE SESSION TO duonguser;
Thu Hồi Quyền Hệ Thống
REVOKE system_privilege FROM user_or_role; REVOKE CREATE SESSION FROM duonguser;
3. Quản Trị Quyền Đối Tượng (Object Privileges)
Cấp Quyền Đối Tượng
GRANT object_privilege ON object TO user_or_role; GRANT SELECT ON employees TO duonguser;
Thu Hồi Quyền Đối Tượng
REVOKE object_privilege ON object FROM user_or_role; REVOKE SELECT ON employees FROM duonguser;
4. Sử Dụng Roles
Tạo Roles
Roles là một tập hợp các quyền hạn có thể gán cho người dùng hoặc các Roles khác. Điều này giúp quản lý quyền hạn dễ dàng hơn.
CREATE ROLE role_name; CREATE ROLE developer;
Cấp Quyền Cho Roles
GRANT privilege TO role_name; GRANT CREATE TABLE TO developer;
Gán Roles Cho Người Dùng
GRANT role_name TO user; GRANT developer TO duonguser;
Thu Hồi Roles Từ Người Dùng
REVOKE role_name FROM user; REVOKE developer FROM duonguser;
5. Kiểm Tra Quyền Hạn
Kiểm Tra Quyền Hệ Thống: Chúng ta sử dụng: DBA_SYS_PRIVS
SELECT * FROM DBA_SYS_PRIVS WHERE grantee = 'username'; SELECT * FROM DBA_SYS_PRIVS WHERE grantee = 'DUONGUSER';
Kiểm Tra Quyền Đối Tượng: Chúng ta sử dụng: DBA_TAB_PRIVS
SELECT * FROM DBA_TAB_PRIVS WHERE grantee = 'username'; SELECT * FROM DBA_TAB_PRIVS WHERE grantee = 'DUONGUSER';
6. Ví Dụ Thực Tế
Ví Dụ 1: Tạo Roles và Cấp Quyền
CREATE ROLE manager_role; GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO manager_role; GRANT manager_role TO alice;
Ví Dụ 2: Gán và Thu Hồi Quyền Hạn Đối Tượng
GRANT SELECT, INSERT ON employees TO bob; REVOKE INSERT ON employees FROM bob;
7. Quản Trị Với PL/SQL
Bạn cũng có thể quản lý quyền hạn bằng cách sử dụng các thủ tục và hàm PL/SQL.
Thủ Tục Cấp Quyền
CREATE OR REPLACE PROCEDURE grant_privilege (p_user IN VARCHAR2, p_privilege IN VARCHAR2) AS BEGIN EXECUTE IMMEDIATE 'GRANT ' || p_privilege || ' TO ' || p_user; END;
Thủ Tục Thu Hồi Quyền
CREATE OR REPLACE PROCEDURE revoke_privilege (p_user IN VARCHAR2, p_privilege IN VARCHAR2) AS BEGIN EXECUTE IMMEDIATE 'REVOKE ' || p_privilege || ' FROM ' || p_user; END;
Quản trị quyền trong Oracle Database là một phần quan trọng của bảo mật và quản lý cơ sở dữ liệu. Bằng cách sử dụng các lệnh SQL để cấp, thu hồi quyền hạn và Roles, bạn có thể kiểm soát chính xác những hành động mà người dùng có thể thực hiện. Điều này giúp bảo vệ dữ liệu và duy trì tính toàn vẹn của hệ thống cơ sở dữ liệu.
Các Quyền Hệ Thống Chính
- ALTER SYSTEM: Cho phép thay đổi các thông số của hệ thống cơ sở dữ liệu.
- CREATE SESSION: Cho phép người dùng kết nối (session) với cơ sở dữ liệu.
- ALTER SESSION: Cho phép thay đổi các thông số của session hiện tại.
- CREATE TABLE: Cho phép tạo bảng mới trong schema của người dùng.
- ALTER TABLE: Cho phép thay đổi cấu trúc của bảng.
- DROP TABLE: Cho phép xóa bảng.
- CREATE ANY TABLE: Cho phép tạo bảng trong bất kỳ schema nào.
- ALTER ANY TABLE: Cho phép thay đổi cấu trúc của bảng trong bất kỳ schema nào.
- DROP ANY TABLE: Cho phép xóa bảng trong bất kỳ schema nào.
- CREATE USER: Cho phép tạo người dùng mới.
- ALTER USER: Cho phép thay đổi thông tin của người dùng.
- DROP USER: Cho phép xóa người dùng.
- CREATE ROLE: Cho phép tạo Roles mới.
- ALTER ROLE: Cho phép thay đổi thông tin của Roles.
- DROP ROLE: Cho phép xóa Roles.
- GRANT ANY PRIVILEGE: Cho phép cấp bất kỳ quyền hạn nào cho người dùng hoặc Roles khác.
- REVOKE ANY PRIVILEGE: Cho phép thu hồi bất kỳ quyền hạn nào từ người dùng hoặc Roles khác.
- CREATE ANY INDEX: Cho phép tạo chỉ mục trên bảng trong bất kỳ schema nào.
- ALTER ANY INDEX: Cho phép thay đổi cấu trúc của chỉ mục trong bất kỳ schema nào.
- DROP ANY INDEX: Cho phép xóa chỉ mục trong bất kỳ schema nào.
- CREATE ANY SEQUENCE: Cho phép tạo trình tự trong bất kỳ schema nào.
- ALTER ANY SEQUENCE: Cho phép thay đổi cấu trúc của trình tự trong bất kỳ schema nào.
- DROP ANY SEQUENCE: Cho phép xóa trình tự trong bất kỳ schema nào.
- CREATE ANY PROCEDURE: Cho phép tạo thủ tục lưu trữ, hàm, hoặc gói trong bất kỳ schema nào.
- ALTER ANY PROCEDURE: Cho phép thay đổi thủ tục lưu trữ, hàm, hoặc gói trong bất kỳ schema nào.
- DROP ANY PROCEDURE: Cho phép xóa thủ tục lưu trữ, hàm, hoặc gói trong bất kỳ schema nào.
- CREATE ANY VIEW: Cho phép tạo chế độ xem trong bất kỳ schema nào.
- DROP ANY VIEW: Cho phép xóa chế độ xem trong bất kỳ schema nào.
- CREATE SYNONYM: Cho phép tạo từ đồng nghĩa trong schema của người dùng.
- CREATE ANY SYNONYM: Cho phép tạo từ đồng nghĩa trong bất kỳ schema nào.
- DROP SYNONYM: Cho phép xóa từ đồng nghĩa trong schema của người dùng.
- DROP ANY SYNONYM: Cho phép xóa từ đồng nghĩa trong bất kỳ schema nào.
- CREATE DATABASE LINK: Cho phép tạo liên kết cơ sở dữ liệu.
- DROP DATABASE LINK: Cho phép xóa liên kết cơ sở dữ liệu.
- CREATE PUBLIC DATABASE LINK: Cho phép tạo liên kết cơ sở dữ liệu công khai.
- DROP PUBLIC DATABASE LINK: Cho phép xóa liên kết cơ sở dữ liệu công khai.
- EXECUTE ANY PROCEDURE: Cho phép thực thi bất kỳ thủ tục lưu trữ nào trong bất kỳ schema nào.
- EXECUTE ANY PROGRAM: Cho phép thực thi bất kỳ chương trình nào trong bất kỳ schema nào.
- CREATE ANY TRIGGER: Cho phép tạo trigger trong bất kỳ schema nào.
- ALTER ANY TRIGGER: Cho phép thay đổi cấu trúc của trigger trong bất kỳ schema nào.
- DROP ANY TRIGGER: Cho phép xóa trigger trong bất kỳ schema nào.
Các quyền đối tượng chính:
- ALTER: Cho phép thay đổi cấu trúc của đối tượng như bảng, chế độ xem, hoặc trigger. Đây là quyền hạn quan trọng để điều chỉnh cấu trúc của đối tượng khi cần thiết.
- DELETE: Cho phép xóa dữ liệu từ bảng hoặc chế độ xem. Người dùng có quyền này có thể xóa các bản ghi khỏi đối tượng.
- EXECUTE: Cho phép thực thi thủ tục lưu trữ, hàm, hoặc gói. Quyền này cho phép người dùng gọi và thực thi các đối tượng lập trình trong cơ sở dữ liệu.
- INDEX: Cho phép tạo chỉ mục trên bảng. Chỉ mục là một cơ chế tối ưu hóa dữ liệu giúp cải thiện hiệu suất truy vấn.
- INSERT: Cho phép thêm dữ liệu vào bảng hoặc chế độ xem. Người dùng có quyền này có thể chèn các bản ghi mới vào đối tượng.
- READ: Cho phép đọc dữ liệu từ bảng hoặc chế độ xem. Quyền này được giới thiệu từ Oracle 18c trở lên và cho phép người dùng chỉ có quyền đọc dữ liệu từ đối tượng.
- REFERENCES: Cho phép tạo ràng buộc khóa ngoại trên bảng. Ràng buộc khóa ngoại đảm bảo tính toàn vẹn dữ liệu giữa các bảng trong cơ sở dữ liệu.
- SELECT: Cho phép đọc dữ liệu từ bảng hoặc chế độ xem. Đây là quyền hạn cơ bản để truy vấn và xem dữ liệu từ các đối tượng.
- UPDATE: Cho phép cập nhật dữ liệu trong bảng hoặc chế độ xem. Người dùng có quyền này có thể thay đổi dữ liệu hiện có trong đối tượng.
- FLASHBACK: Cho phép truy xuất dữ liệu từ bảng hoặc chế độ xem trong trạng thái trước đó. Quyền này cho phép người dùng xem lại dữ liệu nhưng không thay đổi nó.
- UNDER: Cho phép tạo bảng hoặc chế độ xem con dựa trên một bảng hoặc chế độ xem cha. Quyền này liên quan đến việc quản lý quan hệ thừa kế giữa các đối tượng.
- ON COMMIT REFRESH: Cho phép cập nhật chế độ xem materialized khi có commit. Chế độ xem materialized là các bản sao lưu trữ của dữ liệu, được cập nhật theo lịch trình hoặc khi có sự kiện cụ thể.