J'ai lutté avec cela il y a toutes ces années, alors voici la réponse que j'aurais aimé avoir :
Généralement, cela complique trop les choses, et la réponse principale pour une application de base est :les autorisations des utilisateurs seront gérées par le code PHP dans les appels d'API que vous effectuez, et un utilisateur de base de données convient. Tous les utilisateurs doivent éviter d'interagir directement avec la base de données pour le développement d'applications en général, afin d'éviter de violer le caractère sacré des données.
Il est bon de penser à la sécurité et aux restrictions, mais la simplicité est reine :plus vous la rendez complexe, plus elle est difficile à entretenir, et donc plus il est facile de rater des cas particuliers.
Dois-je créer un nouvel utilisateur de base de données chaque fois que j'enregistre un nouvel utilisateur Web ?
Non, les utilisateurs de la base de données se distinguent par leurs privilèges. Par conséquent, tous les utilisateurs se conforment à un ensemble de groupes avec différents niveaux de privilège. Les comptes de base de données sont distincts des comptes Web - la connexion à la base de données se fait en arrière-plan et n'a aucun lien avec le compte Web utilisé.
Une bonne approche consisterait à créer un compte DB pour chaque service se connectant directement à la base de données. Pour la grande majorité, ce sera un service, votre serveur Web. Si l'application se développe et que des services isolés tels que les audits, les microservices, la sécurité, l'IOT apparaissent, ils devraient probablement avoir leurs propres comptes.
Les privilèges CRUD peuvent-ils être accordés en toute sécurité à tous les utilisateurs du site Web ?
La question est erronée - vous donnez le CRUD au compte DB, qui en aura besoin. Pour les autorisations CRUD gérées dans PHP, cela dépend vraiment de votre application et de points de terminaison spécifiques. Par exemple, vous ne voulez probablement pas que tous vos utilisateurs puissent supprimer des enregistrements d'utilisateurs, votre code PHP devrait donc empêcher que cela se produise.
Combien de types différents d'utilisateurs de base de données devrait-il y avoir ?
Le nombre dépend de votre base de données. Généralement, il existe 4 groupes
- Administrateurs de bases de données
- Concepteurs de bases de données
- Utilisateurs finaux occasionnels
- Utilisateurs finaux natifs
Cependant, si vous souhaitez accorder des privilèges au niveau de la table, vous devrez peut-être vous diversifier un peu plus. Cela suggérerait que 10 comptes DB représentent une petite quantité, plusieurs centaines sont plus probables .
Plus il y a de privilèges, plus il faut d'espace, mais c'est une considération assez minutieuse et ne devrait pas jouer un grand rôle dans les performances. La complexité est le problème suivant - réfléchissez bien au nombre de groupes et de permutations que vous souhaitez réellement tester. Dans le cas de la question ci-dessus, j'étais un développeur amateur unique - un compte en tant que DBA convient probablement. S'il y avait plusieurs utilisateurs accédant directement à la base de données (déjà probablement une mauvaise idée pour le développement d'applications), alors peut-être les diviser avec des autorisations variables.
Parler d'autorisations au niveau de la table pour une application simple est tout simplement exagéré !