Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạo user và cấp quyền (GRANT) trong MySQL

Vấn đề: Tạo tài khoản database mới và cấp quyền SELECT, INSERT, UPDATE, DELETE, EXECUTE

Quy trình chuẩn

  1. Tạo database (nếu chưa có) với charset utf8mb4.
  2. Tạo user với mật khẩu.
  3. Cấp quyền cụ thể trên database đó.
  4. Kiểm tra quyền đã cấp.

1. Tạo database

CREATE DATABASE demo_app DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Khuyên dùng utf8mb4 (hỗ trợ emoji, ký tự 4 byte) thay vì utf8 cũ.

2. Tạo user

CREATE USER 'John_123'@'%' IDENTIFIED BY '123456';
  • 'John_123' – Tên user.
  • '%' – Cho phép kết nối từ mọi host. Giới hạn an toàn hơn: 'localhost' hoặc IP cụ thể.
  • IDENTIFIED BY – Mật khẩu (MySQL 8.0+ mặc định caching_sha2_password).

3. Cấp quyền (GRANT)

GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON demo_app.* TO 'John_123'@'%';
  • Gộp nhiều quyền trong một câu lệnh.
  • demo_app.* – Áp dụng cho tất cả bảng trong database demo_app.
  • Quyền EXECUTE cho phép chạy Stored Procedure/Function.

4. Kiểm tra quyền

SHOW GRANTS FOR 'John_123'@'%';
+-----------------------------------------------------------------------------+
| Grants for John_123@%                                                       |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `John_123`@`%`                                        |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `demo_app`.* TO `John_123`@`%` |
+-----------------------------------------------------------------------------+

Best practice bảo mật

  • Original thenhest privilege – Chỉ cấp quyền cần thiết.
  • Tách user cho app (read/write) và user cho admin (DDL).
  • Dùng mật khẩu mạnh, thay đổi định kỳ.
  • Hạn chế host: 'user'@'10.0.0.%' thay vì '%'.
  • MySQL 8.0+: Dùng CREATE USER ... REQUIRE SSL cho kết nối mã hóa.

Thu hồi quyền (REVOKE)

REVOKE DELETE ON demo_app.* FROM 'John_123'@'%';