Ho lottato con questo tutti questi anni fa, quindi ecco la risposta che vorrei avere:
In generale, questo complica le cose e la risposta principale per un'applicazione di base è:le autorizzazioni degli utenti saranno gestite dal codice PHP nelle chiamate API che esegui e un utente DB va bene. Tutti gli utenti dovrebbero evitare di interagire direttamente con il DB for app dev in generale, per evitare di violare la santità dei dati.
È bello pensare alla sicurezza e alle restrizioni, ma la semplicità è il re:più la rendi complessa, più è difficile da mantenere, e quindi più facile è perdere casi d'angolo.
Dovrei creare un nuovo utente del database ogni volta che registro un nuovo utente web?
No, gli utenti del database si distinguono per i loro privilegi. Di conseguenza, tutti gli utenti si conformano a un insieme di gruppi con livelli di privilegio variabili. Gli account del database sono separati dagli account Web:la connessione al database viene eseguita dietro le quinte e non ha alcun collegamento all'account Web in uso.
Un buon approccio sarebbe creare un account DB per ogni servizio che si connette direttamente al DB. Per la stragrande maggioranza, questo sarà un servizio, il tuo server web. Se l'applicazione cresce e vengono isolati servizi come audit, microservizi, sicurezza, IOT, probabilmente dovrebbero avere i propri account.
I privilegi CRUD sono sicuri da concedere a tutti gli utenti del sito web?
La domanda è fuorviante:dai il CRUD all'account DB, che ne avrà bisogno. Per le autorizzazioni CRUD gestite all'interno di PHP, dipende davvero dalla tua app e dagli endpoint specifici. Ad esempio, probabilmente non vuoi che tutti i tuoi utenti siano in grado di eliminare i record utente, quindi il tuo codice PHP dovrebbe impedire che ciò accada.
Quanti tipi diversi di utenti DB dovrebbero esserci?
Il numero dipende dal database. In genere, ci sono 4 gruppi
- Amministratori di database
- Progettisti di database
- Utenti finali casuali
- Utenti finali nativi
Tuttavia, se si desidera concedere privilegi a livello di tabella, potrebbe essere necessario espandersi un po' di più. Ciò suggerirebbe che 10 account DB siano una quantità piuttosto piccola, Diverse centinaia sono più probabili .
Più privilegi, più spazio è richiesto, ma è una considerazione abbastanza minuziosa e non dovrebbe svolgere un ruolo importante nelle prestazioni. La complessità è il prossimo problema:pensa attentamente a quanti gruppi e permutazioni vuoi effettivamente testare. Nel caso della domanda precedente, ero un singolo sviluppatore hobbista:un account come DBA probabilmente va bene. Se c'erano più utenti che accedono direttamente al DB (già probabilmente una cattiva idea per lo sviluppo di app), allora potresti dividerli con autorizzazioni diverse.
Parlare di autorizzazioni a livello di tabella per una semplice app è semplicemente esagerato!