Luché con esto hace tantos años, así que aquí está la respuesta que desearía tener:
En general, esto complica demasiado las cosas, y la respuesta principal para una aplicación básica es:los permisos de los usuarios serán administrados por el código PHP en las llamadas a la API que realice, y un usuario de base de datos está bien. Todos los usuarios deben evitar interactuar directamente con la base de datos para el desarrollo de aplicaciones en general, para evitar violar la santidad de los datos.
Es bueno pensar en la seguridad y las restricciones, pero la simplicidad es el rey:cuanto más complejo lo hace, más difícil es mantenerlo y, por lo tanto, más fácil es pasar por alto los casos de esquina.
¿Debería crear un nuevo usuario de base de datos cada vez que registre un nuevo usuario web?
No, los usuarios de la base de datos se distinguen por sus privilegios. Como resultado, todos los usuarios se conforman con un conjunto de grupos con distintos niveles de privilegios. Las cuentas de la base de datos están separadas de las cuentas web:la conexión a la base de datos se realiza en segundo plano y no tiene ningún vínculo con la cuenta web que se está utilizando.
Un buen enfoque sería crear una cuenta de base de datos para cada servicio que se conecte directamente a la base de datos. Para la gran mayoría, este será un servicio, su servidor web. Si la aplicación crece y surgen servicios aislados como auditorías, microservicios, seguridad, IOT, probablemente deberían tener sus propias cuentas.
¿Es seguro otorgar privilegios CRUD a todos los usuarios del sitio web?
La pregunta está equivocada:le da el CRUD a la cuenta DB, que lo necesitará. Para los permisos CRUD administrados dentro de PHP, realmente depende de su aplicación y puntos finales específicos. Por ejemplo, probablemente no desee que todos sus usuarios puedan eliminar registros de usuarios, por lo que su código PHP debería evitar que eso suceda.
¿Cuántos tipos diferentes de usuarios de bases de datos debería haber?
El número depende de su base de datos. Generalmente, hay 4 grupos
- Administradores de bases de datos
- Diseñadores de bases de datos
- Usuarios finales ocasionales
- Usuarios finales nativos
Sin embargo, si desea otorgar privilegios de nivel de tabla, es posible que deba expandirse un poco más. Esto sugeriría que 10 cuentas de base de datos es una cantidad bastante pequeña, varios cientos es más probable .
Cuantos más privilegios, más espacio se requiere, pero es una consideración bastante pequeña y no debería jugar un papel importante en el rendimiento. La complejidad es el siguiente problema:piense detenidamente cuántos grupos y permutaciones realmente desea probar. En el caso de la pregunta anterior, yo era un solo desarrollador aficionado:una cuenta como DBA probablemente esté bien. Si hubiera varios usuarios accediendo directamente a la base de datos (probablemente ya sea una mala idea para el desarrollador de aplicaciones), entonces tal vez sepárelos con diferentes permisos.
¡Hablar de permisos de nivel de tabla para una aplicación simple es una exageración!