Để cấp quyền cho người dùng trong MySQL, bạn có thể sử dụng lệnh GRANT để định nghĩa các quyền cụ thể mà người dùng có thể thực hiện trên cơ sở dữ liệu hoặc bảng. Lệnh GRANT cho phép bạn linh hoạt trong việc phân quyền cho từng người dùng.

Cấu trúc cơ bản của lệnh GRANT

GRANT quyền ON cơ_sở_dữ_liệu.bảng TO 'tên_người_dùng'@'host' IDENTIFIED BY 'mật_khẩu';
  • quyền: Các quyền bạn muốn cấp cho người dùng (có thể là SELECT, INSERT, UPDATE, DELETE, hoặc tất cả các quyền với từ khóa ALL PRIVILEGES).
  • cơ_sở_dữ_liệu.bảng: Tên của cơ sở dữ liệu và bảng mà bạn muốn áp dụng quyền cho người dùng (có thể là *.* nếu bạn muốn cấp quyền trên tất cả cơ sở dữ liệu và bảng).
  • ‘tên_người_dùng’@’host’: Tên người dùng và host từ đó người dùng sẽ kết nối (thường là localhost hoặc % cho mọi địa chỉ IP).
  • ‘mật_khẩu’: (Tùy chọn) Mật khẩu mà bạn đặt cho người dùng. Nếu người dùng đã tồn tại, phần này không bắt buộc.

Các ví dụ cụ thể

1. Cấp quyền SELECT cho một cơ sở dữ liệu

GRANT SELECT ON mydatabase.* TO 'myuser'@'localhost';
  • Lệnh này cấp quyền SELECT (chỉ xem) trên tất cả các bảng trong cơ sở dữ liệu mydatabase cho người dùng myuser trên máy chủ localhost.

2. Cấp quyền INSERT và UPDATE trên một bảng cụ thể

GRANT INSERT, UPDATE ON mydatabase.mytable TO 'myuser'@'localhost';
  • Lệnh này cấp quyền INSERT (chèn dữ liệu) và UPDATE (cập nhật dữ liệu) trên bảng mytable thuộc cơ sở dữ liệu mydatabase cho người dùng myuser.

3. Cấp tất cả quyền trên một cơ sở dữ liệu

GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
  • Cấp tất cả quyền (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, …) trên tất cả các bảng trong cơ sở dữ liệu mydatabase cho người dùng myuser.

4. Cấp quyền cho mọi địa chỉ IP

GRANT SELECT, INSERT ON mydatabase.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword';
  • Cấp quyền SELECTINSERT trên cơ sở dữ liệu mydatabase cho người dùng myuser với khả năng đăng nhập từ mọi địa chỉ IP (% đại diện cho tất cả host).

5. Cấp quyền tạo bảng và xóa bảng

GRANT CREATE, DROP ON mydatabase.* TO 'myuser'@'localhost';
  • Cấp quyền CREATE (tạo bảng) và DROP (xóa bảng) trên tất cả các bảng trong cơ sở dữ liệu mydatabase cho người dùng myuser.

6. Cấp quyền quản trị viên (SUPER) trên toàn bộ server

GRANT SUPER ON *.* TO 'adminuser'@'localhost';
  • Lệnh này cấp quyền SUPER cho người dùng adminuser để thực hiện các tác vụ quản trị trên toàn bộ server MySQL.

Hiệu lực của quyền đã cấp

Để các quyền đã cấp có hiệu lực ngay lập tức, bạn cần chạy lệnh:

FLUSH PRIVILEGES;

Các quyền phổ biến trong MySQL

  • SELECT: Cho phép người dùng truy vấn dữ liệu từ bảng.
  • INSERT: Cho phép chèn dữ liệu mới vào bảng.
  • UPDATE: Cho phép cập nhật dữ liệu trong bảng.
  • DELETE: Cho phép xóa dữ liệu từ bảng.
  • CREATE: Cho phép tạo mới bảng và cơ sở dữ liệu.
  • DROP: Cho phép xóa bảng hoặc cơ sở dữ liệu.
  • ALTER: Cho phép thay đổi cấu trúc bảng.
  • INDEX: Cho phép tạo hoặc xóa chỉ mục trên bảng.
  • GRANT OPTION: Cho phép người dùng cấp quyền cho người khác.

Thu hồi quyền bằng lệnh REVOKE

Nếu bạn cần thu hồi quyền của một người dùng, bạn sử dụng lệnh REVOKE theo cấu trúc sau:

REVOKE quyền ON cơ_sở_dữ_liệu.bảng FROM 'tên_người_dùng'@'host';

Ví dụ:

Thu hồi quyền SELECT từ người dùng:

REVOKE SELECT ON mydatabase.* FROM 'myuser'@'localhost';

Tóm lại

Lệnh GRANT trong MySQL là cách để cấp quyền truy cập cụ thể cho người dùng vào các bảng hoặc cơ sở dữ liệu. Bạn có thể cấp quyền từ đơn giản như SELECT cho đến phức tạp như ALL PRIVILEGES, và lệnh này cũng cho phép kiểm soát chi tiết về quyền mà người dùng có thể sử dụng. Việc sử dụng đúng lệnh GRANT sẽ giúp bảo vệ và quản lý hệ thống MySQL một cách hiệu quả.