MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Bảo mật MySQL - Sử dụng Đặc quyền Truy cập Dữ liệu để Cài đặt An toàn

Bảo mật cài đặt MySQL là điều cần chú ý của mọi DBA MySQL. Mặc dù chúng tôi đã thảo luận về cách bạn nên chăm sóc toàn bộ bảo mật MySQL của mình (hãy xem một số bài viết trước đây của chúng tôi, đặc biệt là loạt bài về bảo mật MySQL Phần một và Phần hai), chúng tôi chưa thảo luận về các vấn đề cụ thể liên quan đến bảo mật, bao gồm những vấn đề liên quan đến đặc quyền. Chúng tôi làm điều đó ở đây.

Đặc quyền trong MySQL là gì?

Các đặc quyền trong MySQL có thể được cấp cho các tài khoản. Nếu bạn cấp đặc quyền tài khoản trong MySQL, bạn xác định tài khoản có thể thực hiện những thao tác nào. Đặc quyền có thể được cấp cho cơ sở dữ liệu hoặc đối tượng cơ sở dữ liệu (bảng, chỉ mục, dạng xem, v.v.) Đặc quyền cũng có thể là động hoặc tĩnh. Các đặc quyền tĩnh được tích hợp vào máy chủ trong khi các đặc quyền động có thể được xác định trong thời gian chạy.

Cách Sử dụng Đặc quyền cho Bảo mật MySQL

Để sử dụng các đặc quyền trong MySQL, đây là điều bạn phải nhớ:

  • Để gán hoặc thu hồi đặc quyền, bạn cần có người dùng MySQL. Người dùng có thể được tạo bằng cách chạy truy vấn TẠO NGƯỜI DÙNG:

    CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

  • Để gán hoặc thu hồi đặc quyền, hãy sử dụng câu lệnh GRANT và REVOKE tương ứng:

    GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;
    REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;

  • Bạn có thể lưu các đặc quyền bằng cách chạy FLUSH PRIVILEGES. Xem chúng bằng cách chạy SHOW GRANTS.

  • Không thể sử dụng câu lệnh GRANT để cấp cả đặc quyền và vai trò; câu lệnh phải cấp đặc quyền hoặc vai trò.

Để cài đặt MySQL của bạn an toàn hơn, hãy xem xét những điều sau:

  • Chỉ cấp cho người dùng của bạn các đặc quyền cần thiết để hoàn thành nhiệm vụ của họ (ví dụ:không sử dụng GRANT ALL nếu đó là không cần thiết)

  • Nói chung, tránh chạy MySQL với tư cách người dùng gốc Unix vì bất kỳ người dùng nào có đặc quyền FILE đều có thể gây ra máy chủ để tạo tệp dưới dạng thư mục gốc.

  • Không cấp đặc quyền FILE cho người dùng không phải là quản trị viên (tham khảo giải thích ở trên)

  • Cân nhắc chạy mysqld như một người dùng bình thường không có đặc quyền.

  • Không cấp QUY TRÌNH hoặc SUPER đặc quyền cho người dùng không phải là quản trị viên. Đặc quyền PROCESS cho phép người dùng xem tất cả các quá trình đang chạy trong MySQL. Đặc quyền SUPER, trong số những thứ khác, cho phép thay đổi cấu hình máy chủ, cho phép sử dụng các câu lệnh CREATE SERVER, ALTER SERVER và DROP SERVER, đồng thời cho phép sử dụng câu lệnh KILL cho phép người dùng hủy các câu lệnh thuộc các tài khoản khác. Hãy nhớ rằng MySQL dành một kết nối bổ sung cho những người dùng có đặc quyền SUPER. Đặc quyền SUPER cũng cho phép người dùng kiểm soát các máy chủ nhân rộng.

Làm theo lời khuyên ở trên và bạn sẽ chắc chắn trên con đường cài đặt MySQL an toàn hơn. Tuy nhiên, nếu bạn đang sử dụng phiên bản MySQL mới hơn, có một điều nữa mà chúng tôi cần bạn lưu ý - MySQL đã giới thiệu các vai trò trong MySQL 8.0.16.

Các vai trò trong Bảo mật MySQL

Nếu bạn chưa bao giờ nghe nói về các vai trò trong MySQL, đừng băn khoăn. Các vai trò rất giống với các đặc quyền, đó là lý do tại sao chúng tôi đưa chúng vào bài đăng trên blog này. Trên thực tế, các vai trò chỉ có vậy - chúng là tập hợp các đặc quyền, tức là khi một vai trò được chỉ định cho một người dùng, một người dùng sẽ được chỉ định tất cả các đặc quyền được kết nối với vai trò đó. Có thể thêm và xóa vai trò bằng cách sử dụng câu lệnh CREATE ROLE và DROP ROLE. Để sử dụng các vai trò trong MySQL, hãy tạo một tên vai trò, cấp đặc quyền cho vai trò đó, sau đó gán nó cho người dùng như sau:

CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];

Bạn nên Cấp những Đặc quyền nào?

Khi cấp đặc quyền, hãy tuân theo nguyên tắc ít đặc quyền nhất:tài khoản MySQL chỉ nên được cấp các đặc quyền cần thiết cho các mục đích của nó. Các đặc quyền được sử dụng phổ biến nhất là:

  • TẤT CẢ CÁC QUYỀN RIÊNG TƯ cấp tất cả các đặc quyền cho một tài khoản.

  • CREATE cấp các đặc quyền cần thiết để tạo cơ sở dữ liệu và bảng.

  • DROP cấp các đặc quyền cần thiết để loại bỏ cơ sở dữ liệu và bảng.

  • DELETE cấp các đặc quyền cần thiết để xóa các hàng khỏi bảng.

  • INSERT cấp các đặc quyền cần thiết để chèn hàng vào bảng.

  • SELECT cấp các đặc quyền cần thiết để chạy các truy vấn SELECT.

  • UPDATE cấp các đặc quyền cần thiết để cập nhật các hàng trong bảng (để chạy các truy vấn UPDATE)

Nói chung, bạn nên tránh cấp tất cả các đặc quyền cho một tài khoản; thay vào đó, hãy xem xét việc tuân theo nguyên tắc ít đặc quyền nhất. Cũng nên nhớ rằng việc cấp thêm các đặc quyền cho một người dùng nhất định không xóa các đặc quyền đã có trước đó. Bạn cũng có thể xem các đặc quyền của một người dùng cụ thể bằng cách sử dụng cú pháp này (thay thế tên người dùng bằng tên người dùng của người dùng của bạn):

SHOW GRANTS FOR ‘username’;

Tóm tắt

Khi xử lý các đặc quyền trong MySQL, hãy nhớ rằng bạn nên tuân theo nguyên tắc ít đặc quyền nhất (tức là chỉ cấp các đặc quyền cần thiết). Làm theo lời khuyên được nêu trong blog này sẽ giúp cài đặt MySQL của bạn an toàn hơn. Hãy nhớ rằng các đặc quyền của bạn cần được lưu để có hiệu lực (câu lệnh FLUSH PRIVILEGES có thể giúp bạn làm điều đó), ngoài ra, hãy nhớ rằng từ MySQL 8.0.16, bạn có thể sử dụng các vai trò trong MySQL để gán các tập hợp đặc quyền cho một người dùng cụ thể.

Chúng tôi hy vọng rằng bài đăng trên blog này đã giúp bạn bảo mật (các) phiên bản MySQL của mình. Nếu bạn có bất kỳ câu hỏi hoặc suy nghĩ nào, vui lòng bình luận, đồng thời cân nhắc xem qua loạt bài về bảo mật MySQL của chúng tôi (tại đây và tại đây)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu các chỉ mục trong MySQL:Phần thứ hai

  2. 4 cách liệt kê tất cả các bảng trong cơ sở dữ liệu MariaDB

  3. Cách ATAN () hoạt động trong MariaDB

  4. Cách TIME_FORMAT () hoạt động trong MariaDB

  5. Quản lý khóa SSL và mã hóa dữ liệu MySQL khi chuyển tuyến