Tôi đã đấu tranh với điều này suốt những năm trước đây, vì vậy đây là câu trả lời mà tôi ước gì có được:
Nói chung, đây là những thứ quá phức tạp và câu trả lời tiêu đề cho một ứng dụng cơ bản là:quyền của người dùng sẽ được quản lý bởi mã PHP trong các lệnh gọi API mà bạn thực hiện và một người dùng DB là tốt. Tất cả người dùng nên tránh tương tác trực tiếp với DB dành cho nhà phát triển ứng dụng nói chung, để tránh vi phạm tính tôn trọng của dữ liệu.
Thật tốt khi nghĩ về bảo mật và các hạn chế, nhưng sự đơn giản là vua - bạn càng làm cho nó phức tạp thì càng khó bảo trì và do đó càng dễ bỏ sót các trường hợp góc.
Tôi có nên tạo người dùng cơ sở dữ liệu mới bất cứ khi nào tôi đăng ký người dùng web mới không?
Không, người dùng cơ sở dữ liệu được phân biệt bởi các đặc quyền của họ. Do đó, tất cả người dùng tuân theo một tập hợp các nhóm với các mức đặc quyền khác nhau. Các tài khoản cơ sở dữ liệu tách biệt với các tài khoản web - việc kết nối với cơ sở dữ liệu được thực hiện ở phía sau và không có liên kết nào đến tài khoản web đang được sử dụng.
Một cách tiếp cận tốt là tạo một tài khoản DB cho mỗi dịch vụ kết nối trực tiếp với DB. Đối với đại đa số, đây sẽ là một dịch vụ, máy chủ web của bạn. Nếu ứng dụng phát triển và các dịch vụ cô lập như kiểm toán, dịch vụ vi mô, bảo mật, IOT xuất hiện, chúng có lẽ nên có tài khoản của riêng mình.
Đặc quyền CRUD có an toàn để cung cấp cho tất cả người dùng của trang web không?
Câu hỏi này bị hiểu nhầm - bạn cung cấp CRUD cho tài khoản DB, tài khoản này sẽ cần nó. Đối với các quyền CRUD được quản lý bên trong PHP, nó thực sự phụ thuộc vào ứng dụng của bạn và các điểm cuối cụ thể. Ví dụ:bạn có thể không muốn tất cả người dùng của mình có thể xóa bản ghi Người dùng, vì vậy mã PHP của bạn sẽ ngăn điều đó xảy ra.
Nên có bao nhiêu kiểu người dùng DB khác nhau?
Số lượng phụ thuộc vào cơ sở dữ liệu của bạn. Nói chung, có 4 nhóm
- Quản trị viên Cơ sở dữ liệu
- Nhà thiết kế cơ sở dữ liệu
- Người dùng cuối thông thường
- Người dùng cuối gốc
Tuy nhiên, nếu bạn muốn cấp đặc quyền cấp bảng thì bạn có thể cần phải phân nhánh nhiều hơn một chút. Điều này cho thấy 10 tài khoản DB là một số tiền khá nhỏ, nhiều khả năng là vài trăm cái .
Càng nhiều đặc quyền, càng cần nhiều không gian, nhưng đó là một cân nhắc khá ngắn gọn và không đóng một vai trò lớn trong hiệu suất. Độ phức tạp là vấn đề tiếp theo - hãy suy nghĩ kỹ xem bạn thực sự muốn kiểm tra bao nhiêu nhóm và hoán vị. Trong trường hợp của câu hỏi ở trên, tôi là một nhà phát triển theo sở thích duy nhất - một tài khoản làm DBA có lẽ ổn. Nếu có nhiều người dùng truy cập trực tiếp vào DB (có lẽ đã là một ý tưởng tồi đối với các nhà phát triển ứng dụng), thì có thể tách họ ra với các quyền khác nhau.
Nói về quyền cấp bảng cho một ứng dụng đơn giản là quá mức cần thiết!