Quyền cơ sở dữ liệu GRANT, REVOKE và DENY
Ngôn ngữ kiểm soát dữ liệu (DCL) là một tập hợp con của Ngôn ngữ truy vấn có cấu trúc (SQL) và cho phép các quản trị viên cơ sở dữ liệu cấu hình truy cập bảo mật cho các cơ sở dữ liệu quan hệ. Nó bổ sung cho Ngôn ngữ định nghĩa dữ liệu (DDL), được sử dụng để thêm và xóa các đối tượng cơ sở dữ liệu và Ngôn ngữ thao tác dữ liệu (DML) được sử dụng để truy xuất, chèn và sửa đổi nội dung của cơ sở dữ liệu.
DCL là tập con của SQL đơn giản nhất, vì nó 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à loại bỏ quyền cơ sở dữ liệu theo kiểu cực kỳ chi tiết.
Thêm quyền với lệnh GRANT
Lệnh GRANT được quản trị viên sử dụng để thêm các quyền mới cho người dùng cơ sở dữ liệu . Nó có một cú pháp rất đơn giản, được định nghĩa như sau:
GRANT [đặc quyền] TRÊN [đối tượng] ĐẾN [người dùng] [VỚI CHỌN LỰA CHỌN]Dưới đây là tóm tắt về mỗi tham số bạn có thể cung cấp với lệnh này:
- Đặc quyền có thể là từ khóa ALL (để cấp nhiều quyền) hoặc cho phép cơ sở dữ liệu cụ thể hoặc thiết lập quyền. Ví dụ bao gồm CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE và CREATE VIEW.
- Đố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 đặc quyền hợp lệ khác nhau dựa trên loại đối tượng cơ sở dữ liệu mà bạn đưa vào trong mệnh đề này. Thông thường, đối tượng sẽ là một cơ sở dữ liệu, hàm, thủ tục lưu sẵn , bảng hoặc khung nhìn.
- 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 thế một vai trò cho người dùng trong mệnh đề này nếu bạn muốn sử dụng bảo mật cơ sở dữ liệu dựa trên vai trò.
- Nếu bạn bao gồm mệnh đề WITH GRANT OPTION tùy chọn ở cuối lệnh GRANT, bạn không chỉ cấp cho người dùng được chỉ định các quyền được định nghĩa trong câu lệnh SQL mà còn cung cấp cho người dùng khả năng cấp các quyền đó cho người dùng cơ sở dữ liệu khác . Vì lý do này, hãy sử dụng điều khoản này cẩn thận.
Ví dụ: giả sử bạn muốn cấp cho người dùng Joe khả năng truy xuất thông tin từ bảng nhân viên trong cơ sở dữ liệu có tên HR. Bạn có thể sử dụng lệnh SQL sau:
CHỌN LỰA CHỌN TRÊN HR.employees ĐẾN JoeJoe bây giờ sẽ có khả năng lấy thông tin từ bảng nhân viên. Tuy nhiên, anh ta sẽ không thể cấp cho người dùng khác quyền lấy thông tin từ bảng đó vì bạn không bao gồm mệnh đề WITH GRANT OPTION trong câu lệnh GRANT.
Thu hồi quyền truy cập cơ sở dữ liệu
Lệnh REVOKE được sử dụng để loại bỏ quyền truy cập cơ sở dữ liệu từ một người dùng trước đây đã cấp quyền truy cập đó. Cú pháp cho lệnh này được định nghĩa như sau:
REVOKE [GRANT OPTION FOR] [permission] ON [đối tượng] TỪ [người dùng] [CASCADE]Dưới đây là tóm tắt về các tham số cho lệnh REVOKE:
- Quyền chỉ định các quyền cơ sở dữ liệu để loại bỏ khỏi người dùng được xác định. Lệnh này thu hồi cả xác nhận GRANT và DENY trước đây được thực hiện cho quyền được xác định.
- Đố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 đặc quyền hợp lệ khác nhau dựa trên loại đối tượng cơ sở dữ liệu mà bạn đưa vào trong mệnh đề này. Thông thường, đối tượng sẽ là một cơ sở dữ liệu, hàm, thủ tục lưu sẵn, bảng hoặc khung nhìn.
- 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 thế một vai trò cho người dùng trong mệnh đề này nếu bạn muốn sử dụng bảo mật cơ sở dữ liệu dựa trên vai trò.
- Mệnh đề GRANT OPTION FOR loại bỏ khả năng của người dùng được chỉ định để cấp quyền cụ thể cho người dùng khác. Lưu ý : Nếu bạn bao gồm mệnh đề GRANT OPTION FOR trong câu lệnh REVOKE, quyền chính sẽ không bị thu hồi. Điều khoản này chỉ thu hồi khả năng cấp.
- 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.
Ví dụ: lệnh sau đây thu hồi quyền được cấp cho Joe trong ví dụ trước:
LỰA CHỌN LỰA CHỌN VỀ HR.employees TỪ JoeRõ ràng từ chối truy cập cơ sở dữ liệu
Lệnh DENY được sử dụng để ngăn chặn một cách rõ ràng người dùng nhận được một quyền cụ thể. Điều này hữu ích khi người dùng là thành viên của vai trò hoặc nhóm được cấp quyền và bạn muốn ngăn người dùng đó thừa kế quyền bằng cách tạo ngoại lệ. Cú pháp cho lệnh này như sau:
DENY [permission] ON [object] TO [user] Các tham số cho lệnh DENY giống hệt với các tham số được sử dụng cho lệnh GRANT.
Ví dụ: nếu bạn muốn đảm bảo rằng Matthew sẽ không bao giờ nhận được khả năng xóa thông tin từ bảng nhân viên, hãy đưa ra lệnh sau: