Data Control Language (DCL) là một tập con của Structured Query Language (SQL). Quản trị viên cơ sở dữ liệu dùng DCL để cấu hình quyền truy cập bảo mật cho cơ sở dữ liệu quan hệ. Nó bổ sung cho Data Definition Language (DDL) (thêm/xóa đối tượng cơ sở dữ liệu) và Data Manipulation Language (DML) (truy xuất, chèn, sửa đổi nội dung cơ sở dữ liệu).
DCL là tập con SQL đơn giản nhất, vì chỉ bao gồm ba lệnh: GRANT, REVOKE và DENY. Kết hợp ba lệnh này cung cấp cho quản trị viên sự linh hoạt để thiết lập và xóa quyền cơ sở dữ liệu một cách chi tiết.
Cấp quyền với lệnh GRANT
Lệnh GRANT thêm quyền mới cho người dùng cơ sở dữ liệu. Cú pháp rất đơn giản, định nghĩa như sau:
GRANT [privilege] ON [object] TO [user] [WITH GRANT OPTION]
Giải thích các tham số:
- Privilege (Quyền hạn) — có thể là từ khóa ALL (cấp nhiều quyền) hoặc quyền cơ sở dữ liệu cụ thể/nhóm quyền. Ví dụ: CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE, CREATE VIEW.
- Object (Đối tượng) — có thể là bất kỳ đối tượng cơ sở dữ liệu nào. Các tùy chọn quyền hợp lệ thay đổi tùy theo loại đối tượng. Thường là cơ sở dữ liệu, function, stored procedure, table hoặc view.
- User (Người dùng) — có thể là bất kỳ người dùng cơ sở dữ liệu nào. Bạn cũng có thể thay bằng role (vai trò) nếu muốn dùng bảo mật dựa trên vai trò.
- Nếu bao gồm mệnh đề tùy chọn WITH GRANT OPTION ở cuối lệnh GRANT, bạn không chỉ cấp quyền cho người dùng đó mà còn cho phép người dùng đó cấp tiếp cùng quyền đó cho người dùng khác. Hãy dùng mệnh đề này cẩn thận.
Ví dụ: Giả sử bạn muốn cấp cho người dùng Joe quyền truy xuất thông tin từ bảng employees trong cơ sở dữ liệu HR. Dùng lệnh SQL sau:
GRANT SELECT ON HR.employees TO Joe
Joe có thể truy xuất thông tin từ bảng employees. Tuy nhiên, anh ấy không thể cấp cho người dùng khác quyền truy xuất từ bảng đó vì script DCL không bao gồm mệnh đề WITH GRANT OPTION.
Thu hồi quyền truy cập cơ sở dữ liệu
Lệnh REVOKE xóa quyền truy cập cơ sở dữ liệu từ người dùng trước đó được cấp quyền đó. Cú pháp:
REVOKE [GRANT OPTION FOR] [permission] ON [object] FROM [user] [CASCADE]
Giải thích tham số REVOKE:
- Permission — chỉ định quyền cơ sở dữ liệu để xóa từ người dùng được xác định. Lệnh thu hồi cả xác nhận GRANT và DENY trước đó cho quyền đó.
- Object — bất kỳ đối tượng cơ sở dữ liệu nào. Tùy chọn quyền hợp lệ thay đổi theo loại đối tượng. Thường là database, function, stored procedure, table, view.
- User — bất kỳ người dùng cơ sở dữ liệu nào. Có thể thay bằng role nếu dùng bảo mật dựa trên vai trò.
- Mệnh đề GRANT OPTION FOR xóa khả năng của người dùng được chỉ định cấp quyền đó cho người khác. Nếu bao gồm mệnh đề này trong REVOKE, quyền chính không bị thu hồi, chỉ thu hồi khả năng cấp quyền.
- Tùy chọn CASCADE cũng thu hồi quyền được chỉ định từ bất kỳ người dùng nào mà người dùng được chỉ định đã cấp quyền cho họ.
Lệnh sau thu hồi quyền đã cấp cho Joe trong ví dụ trước:
REVOKE SELECT ON HR.employees FROM Joe
Từ chối quyền truy cập cơ sở dữ liệu một cách rõ ràng
Lệnh DENY ngăn chặn rõ ràng một người dùng nhận một quyền cụ thể. Tính năng này hữu ích khi người dùng là thành viên của role/nhóm được cấp quyền, và bạn muốn ngăn chặn người dùng đó kế thừa quyền bằng cách tạo ngoại lệ. Cú pháp:
DENY [permission] ON [object] TO [user]
Tham số DENY giống hệt GRANT. Ví dụ: Nếu muốn chắc chắn Matthew không bao giờ nhận quyền xóa thông tin từ bảng employees, thực hiện lệnh:
DENY DELETE ON HR.employees TO Matthew