Câu lệnh GRANT trong MySQL được sử dụng để cấp quyền cho người dùng hoặc nhóm người dùng trên các đối tượng như cơ sở dữ liệu, bảng, cột, thủ tục, hàm, hoặc trên toàn bộ hệ thống. Việc quản lý quyền sử dụng người dùng là rất quan trọng trong MySQL để bảo mật và phân quyền rõ ràng.

Dưới đây là hướng dẫn chi tiết về câu lệnh GRANT trong MySQL, bao gồm các trường hợp từ cơ bản đến nâng cao.

1. Cú pháp cơ bản của câu lệnh GRANT

quyền

Câu lệnh trên sẽ cấp tất cả các quyền cho người dùng user1 để thực hiện bất kỳ thao tác nào trên tất cả các cơ sở dữ liệu từ bất kỳ máy chủ nào.

3.2. Cấp quyền truy cập vào một cơ sở dữ liệu

Để cấp quyền SELECT, INSERT, và UPDATE cho người dùng user2 chỉ trên cơ sở dữ liệu shop:

user2

Người dùng user3 sẽ chỉ có thể đọc và xóa dữ liệu trong bảng employees của cơ sở dữ liệu company.

5. Cấp quyền cho cột cụ thể

Bạn cũng có thể cấp quyền chỉ trên một hoặc nhiều cột trong bảng.

Ví dụ:

Cấp quyền SELECT cho người dùng user4 chỉ trên cột first_namelast_name của bảng customers:

user4

Người dùng user5 sẽ có quyền thực thi tất cả các thủ tục lưu trữ và hàm trong cơ sở dữ liệu finance.

7. Cấp quyền với tùy chọn cấp tiếp (GRANT OPTION)

Sử dụng WITH GRANT OPTION để cho phép người dùng được cấp quyền có thể cấp lại quyền đó cho người dùng khác.

Ví dụ:

Cấp tất cả các quyền cho người dùng admin và cho phép họ cấp quyền lại cho người dùng khác:

admin

Người dùng user6 sẽ chỉ có thể đọc dữ liệu khi họ kết nối từ địa chỉ IP 192.168.1.100.

9. Xem quyền của người dùng

Để xem quyền của một người dùng cụ thể, bạn có thể sử dụng câu lệnh:

user7

Kết quả sẽ hiển thị tất cả các quyền mà người dùng user7 đã được cấp.

10. Thu hồi quyền (REVOKE)

Nếu bạn muốn thu hồi các quyền đã cấp, bạn có thể sử dụng câu lệnh REVOKE.

Ví dụ:

Thu hồi quyền SELECT từ người dùng user7 trên cơ sở dữ liệu sales:

SELECT

Tổng kết cấp quyền:

  • GRANT là câu lệnh được sử dụng để cấp quyền cho người dùng hoặc nhóm người dùng trong MySQL.
  • Các quyền có thể được cấp ở nhiều cấp độ: toàn bộ hệ thống, cơ sở dữ liệu, bảng, cột, hoặc thậm chí cấp độ thủ tục và hàm.
  • WITH GRANT OPTION cho phép người dùng cấp quyền cho người dùng khác.
  • Quyền có thể được giới hạn dựa trên địa chỉ máy chủ hoặc IP.
  • Để thu hồi quyền, bạn sử dụng câu lệnh REVOKE.

Với những thông tin trên, bạn có thể quản lý và phân quyền người dùng trong MySQL một cách chi tiết và hiệu quả.

12. Ví dụ cấp quyền nâng cao trong MySQL

Các ví dụ cấp quyền nâng cao sẽ tập trung vào việc kiểm soát chi tiết và chuyên sâu hơn, bao gồm việc cấp quyền trên nhiều cấp độ đối tượng khác nhau, phân quyền cho cột và điều khiển truy cập nâng cao.

12.1. Cấp quyền chỉ cho một số bảng trong cơ sở dữ liệu

Bạn có thể cấp quyền cho một người dùng chỉ trên một số bảng cụ thể trong một cơ sở dữ liệu. Ví dụ, nếu bạn muốn cấp quyền SELECTINSERT cho người dùng user1 chỉ trên bảng employeesdepartments trong cơ sở dữ liệu

user1

Người dùng user2 sẽ chỉ có thể xem dữ liệu từ các cột first_namelast_name, không có quyền truy cập vào các cột khác trong bảng employees.

12.3. Cấp quyền EXECUTE cho các thủ tục lưu trữ (Stored Procedures)

Trong trường hợp bạn muốn cấp quyền cho người dùng thực hiện các thủ tục lưu trữ (stored procedures) hoặc hàm (functions), bạn cần cấp quyền EXECUTE.

Ví dụ:

Cấp quyền EXECUTE cho người dùng user3 trên tất cả các thủ tục và hàm trong cơ sở dữ liệu sales:

user3

Người dùng admin1 không chỉ có toàn bộ quyền trên cơ sở dữ liệu company mà còn có thể cấp các quyền này cho những người dùng khác.

12.5. Giới hạn quyền truy cập dựa trên địa chỉ IP

Bạn có thể hạn chế quyền của người dùng chỉ từ một địa chỉ IP hoặc dải địa chỉ IP nhất định. Điều này giúp tăng cường bảo mật, chỉ cho phép truy cập từ những địa chỉ cụ thể.

Ví dụ:

Cấp quyền SELECT cho người dùng user4 chỉ khi họ truy cập từ địa chỉ IP 192.168.1.50:

user4
Bước 2: Gán quyền cho vai trò
user5

Người dùng user6 chỉ có thể đọc dữ liệu từ tất cả các bảng trong cơ sở dữ liệu inventory, mà không có quyền sửa đổi.

12.8. Thu hồi quyền truy cập (REVOKE)

Bạn có thể thu hồi các quyền đã cấp cho một người dùng bằng cách sử dụng câu lệnh REVOKE.

Ví dụ:

Thu hồi quyền INSERT của người dùng user7 trên bảng orders trong cơ sở dữ liệu shop:

user7

Người dùng user8 sẽ chỉ có thể truy cập dữ liệu nếu họ sử dụng kết nối bảo mật SSL.

12.10. Cấp quyền cho người dùng tạm thời

Bạn có thể giới hạn quyền của người dùng trong một khoảng thời gian cụ thể bằng cách sử dụng lệnh CREATE USER với các tùy chọn giới hạn thời gian truy cập.

Ví dụ:
CREATE USER 'temp_user'@'localhost' IDENTIFIED BY 'password' WITH MAX_CONNECTIONS_PER_HOUR 500;
GRANT ALL PRIVILEGES ON project_db.* TO 'temp_user'@'localhost';

Người dùng temp_user sẽ có quyền truy cập đầy đủ vào cơ sở dữ liệu project_db, nhưng bị giới hạn số kết nối tối đa mỗi giờ là 500, và có thể kết nối trong thời gian quy định.