Để 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 SELECT và INSERT 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:
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ả.