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

Cung cấp cho người dùng MySQL chỉ với các đặc quyền tối thiểu

Tôi không đồng ý với Bill ở đây và dòng suy nghĩ của Atomix phù hợp hơn. Trừ khi nó có thể được chứng minh bằng cách khác, câu trả lời của Bill làm tăng cao nguy cơ cơ sở dữ liệu bị xâm phạm.

Có lẽ đối với các nhà phát triển dày dặn kinh nghiệm thì có các biện pháp bảo mật khác, nhưng đối với các nhà phát triển khác, việc cung cấp cho một tập lệnh quyền truy cập đầy đủ, không bị kiểm soát để thực hiện ~ bất cứ điều gì ~ đối với cơ sở dữ liệu sẽ gặp rắc rối, khi không cần thiết.

Nguyên tắc đặc quyền ít nhất nên được sử dụng ở đây. Đối với MySQL, hãy có một siêu người dùng với tất cả các đặc quyền được sử dụng để tạo bảng, thả cơ sở dữ liệu, v.v. Lý tưởng nhất là tên người dùng và mật khẩu này không bao giờ được nhìn thấy trong bất kỳ tệp PHP nào hoặc bất kỳ tệp nào trên máy chủ web. (Tôi đang sử dụng PHP làm ví dụ nhưng nó áp dụng cho các ứng dụng web khác). Bạn sẽ chỉ sử dụng tên người dùng và mật khẩu này với một cái gì đó như PHPMyAdmin hoặc MySQL Workbench.

Sau đó, đối với các tập lệnh PHP, hãy có một tập lệnh với yêu cầu tối thiểu, chẳng hạn như chỉ CHÈN, CHỌN, CẬP NHẬT, thậm chí có thể không XÓA, tùy thuộc vào tập lệnh PHP của bạn. Điều này sẽ nằm trong các tệp PHP, nghĩa là chỉ MỘT tệp BÊN NGOÀI của gốc tài liệu, như được khuyến nghị bởi hầu hết.

Lý do là:vâng, bạn không cần người dùng MySQL cho mọi người dùng ứng dụng web. Nhưng nguyên tắc ít đặc quyền nhất ( http://en.wikipedia.org/wiki/Principle_of_least_privilege ) nên áp dụng. Nếu bằng cách nào đó, siêu người dùng MySQL của bạn bị xâm phạm vì bạn vô tình đặt tên tập lệnh kết nối MySQL của mình là .txt thay vì .php hoặc ai đó đã giành được quyền truy cập vào các tệp máy chủ web, thì điều "tồi tệ nhất" mà họ có thể làm là CHỌN, CẬP NHẬT và CHÈN. .. Dù sao thì dù có thể gây ra những vấn đề lớn, cũng không tệ bằng việc cung cấp cho họ CƠ SỞ DỮ LIỆU, BẢNG XẢY RA và những điều tồi tệ hơn nhiều.

Ngoài ra, trong dự án hiện tại của tôi do thực tiễn phát triển nhanh (tôi không làm việc cho nhưng đề xuất http://www.agilealliance .org / ), một hoặc hai thành viên trong nhóm "không phải công nghệ" đang trực tiếp sử dụng PHPMyAdmin để thực hiện các thay đổi trực tiếp đối với cơ sở dữ liệu MySQL. Điều này là do không bắt buộc phải tạo CMS để nhập dữ liệu trực tiếp đơn giản. Trong trường hợp này, người dùng MySQL thứ ba với các đặc quyền hợp lý nhưng một lần nữa, "vừa đủ" là phù hợp với họ. Chúng tôi không muốn làm tê liệt thành viên trong nhóm với quá ít đặc quyền, nhưng tất nhiên họ sẽ không thể vô tình xóa hoặc thay đổi mọi thứ.

Vì MySQL không có ROLES (tính đến thời điểm câu hỏi ban đầu được hỏi và theo Bill) nên việc cho phép bất kỳ tập lệnh web nào chỉ truy cập MySQL với chỉ một Người dùng Siêu là rất rủi ro.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql tham gia BẬT và VÀ để làm sáng tỏ tài hùng biện

  2. Cách lưu trữ các giá trị FLOAT bị thiếu với NULL trong SQL

  3. Truy vấn MySQL lấy dấu phẩy giá trị được phân tách từ bảng chi tiết chính

  4. Cách chọn chuỗi phụ Ngẫu nhiên, được phân tách bằng dấu hôn (,) Từ một chuỗi

  5. MySQL - tại sao không lập chỉ mục mọi trường?