Quyền gì, trên bảng nào, cho ai
Nhóm **DCL** của SQL dùng để kiểm soát quyền truy cập. `GRANT` cấp một quyền; `REVOKE` thu hồi một quyền đã cấp. Muốn hiểu một yêu cầu phân quyền phải xem đủ **thao tác**, **đối tượng dữ liệu** và **tài khoản**. `SELECT` là quyền đọc dữ liệu, `UPDATE` là quyền sửa, `DELETE` là quyền xóa.
Trong thư viện nhạc giả định, tài khoản `doc_gia` chỉ cần xem bảng BanNhac; nhân viên `bien_tap` được sửa tên bài sau khi kiểm duyệt. Cấp quyền SELECT cho doc_gia không đồng nghĩa cấp UPDATE hoặc DELETE. Khi nhân viên chuyển nhiệm vụ, người quản trị có thể thu hồi quyền UPDATE đã cấp cho bien_tap.
Cú pháp là ví dụ theo hệ QTCSDL
SGK minh họa dạng `GRANT SELECT ON music.* TO guest` và `REVOKE ... ON music.bannhac FROM mod`. Trong đó `music.*` chỉ phạm vi mọi bảng của CSDL `music`, còn `music.bannhac` chỉ một bảng. Đây là **cú pháp minh họa theo MySQL**; SQLite dùng để chạy thử các truy vấn của các bài trước không hỗ trợ `GRANT`/`REVOKE` theo dạng này.
Để phục vụ việc đọc danh mục, yêu cầu hợp lí là **quyền SELECT trên đúng bảng cần xem**, không cấp quyền sửa hoặc xóa chỉ vì cùng một tài khoản đã được đọc. Quyền thực tế còn phụ thuộc hệ QTCSDL, tài khoản đã được tạo và người thực hiện lệnh có quyền cấp/thu hồi tương ứng.
Bài luyện
Tài khoản doc_gia chỉ cần xem danh mục BanNhac. Quyền nào phù hợp với nhiệm vụ này?
Xóa dữ liệu không cần cho việc xem.
Sửa dữ liệu không cần cho việc xem.
SELECT là quyền đọc đúng bảng cần dùng.
Quản trị rộng hơn nhiệm vụ.
Lời giải
doc_gia chỉ cần đọc danh mục. Vì vậy quyền SELECT trên BanNhac đáp ứng yêu cầu; không cần quyền sửa hoặc xóa.
Bài luyện
Muốn thu hồi quyền UPDATE đã cấp cho bien_tap, dùng từ khóa nào theo SGK?
Tạo bảng không thu hồi quyền.
Thêm bản ghi không đổi quyền.
GRANT là cấp quyền.
REVOKE là thu hồi quyền.
Lời giải
GRANT dùng để cấp, còn REVOKE dùng để thu hồi quyền. Vì yêu cầu là bỏ quyền UPDATE của bien_tap, chọn REVOKE.
Bài luyện
Trong ví dụ SGK, `music.*` chỉ phạm vi nào?
Dấu sao sau music đại diện các bảng thuộc music trong ví dụ.
Một bảng sẽ được ghi bằng tên bảng.
Dấu sao không là mã bản ghi.
Phạm vi chỉ là CSDL music.
Lời giải
Trong cú pháp minh họa, music là tên CSDL, dấu sao thay cho mọi bảng bên trong CSDL ấy. Cấp quyền trên music.* rộng hơn chỉ cấp trên music.bannhac.
Đang học