Bonjour à tous !

Je suis actuellement en train de créer un site internet. Pour le contexte et pour faire simple celui-ci sera destiné à ma société, il y a une partie vitrine, compte client et dashboard d'administration.

Mais peu importe le site en question, ce qui m'intéresse ici c'est le nom des tables de la base de données. En effet jusqu'ici je m'étais jamais vraiment poser la question, mais es que le nom des tables est important ?

Voici ma base de données actuelle :

voir_ici

Avez-vous des conseils à ce propos ? Certains nom sont-ils à éviter ? Par exemple certaine de mes tables commencent par ADMIN_, cela pourrait être un risque pour la sécurité du site ?

Autre question concernant la sécurité :

Lorsque l'on ajoute une donnée sensible dans une table comme un mot de passe généralement on le hash, et pour le coup je me demande es ce que le faire pour TOUTES (voir quasiment toutes) les données, comme une adresse, un nom de famille ou autre... ? Cela aurait-il vraiment une utilité voir même une sécurité supplémentaire ?

Je vous remercie d'avance pour vos retours et conseils !

2 réponses


Bah, c'est bien là, il y a peut-être juste que tu utilises du Français et de l'Anglais en même temps.

Bonsoir,
admin_users et users vont fortement se ressembler, autant ne faire qu'une table et ajouter un champ "fonction_user"
de même pour admin_users_compagny et users_compagny
je dirais même avoir aussi un champ dans users et y ajouter "compagny_id" et dans compagny, tu as toute les infos et tu fais le lien entre eux

Alors comme dit plus haut, la base de données est en franglais, faudrait passer le tout en anglais

Ensuite ce serait plus simple de t'aider avec un aperçu complet de la base (les collonnes, histoire de voir les tables plus lourdes et les tables pivots)

Mais avec ce que je vois
Perso je ferais une table users et une table roles pour remplacer admin_users et clients, et ensuite un pivot role_users

Ton user aura un id, et tes roles auront la liste des roles admin et customer (tu pourras même ajouter guest et moderator par la suite, enfin bref tu pourras créer des roles à la volée)

Tu peux ensuite mêttre à la place de admin_access (qui pour moi doit représenter les permissions d'un admin spécifique) une table permissions, role_permissions et user_permissions
Ce sont une liste des permissions et deux pivots:
permissions -> can (ex: dashboard.access, dashboard.edit, users.add, users.edit, users.delete...)
role_permissions -> role_id, permission_id
user_permissions -> user_id, permission_id

Avec cette config tu pourras créer facilement un user avec des roles et des fonctions spécifiques depuis un back office

Pour les autres tables, je n'arrive pas à deviner le role de chaque table donc... ^^'

Ensuite pour les données sensible, si faut que tu cryptes les données, c'est non seulement indispensable niveau sécurité, mais aussi obligatoire d'un point de vue légal sur certaines données (email, adresse postale, informations bancaires...)
Et il y'a une spécificité légale pour les infos bancaires: l'enregistrement des infos bancaire en base de données doit être optionnelle, le client doit pouvoir choisir entre rentrer à chaque fois ses infos bancaires ou enregistrer sa carte en base de données, sauf si ton site propose un abonnement en ligne, dans ce cas tu peux enregistrer la carte (mais il faut quand même dans les condition ajouter que le client accepte que tu enregistres sa CB en base)
Pour le cryptage, il y'a autre chose à prendre en compte: c'est la clé de décryptage (private_key), surtout tu ne doit pas la mettre dans ton projet, sinon n'importe qui pourras fouiller dans tes fichiers et retrouver cette clé, et il pourras ensuite décrypter les infos sensibles, ton cryptage aura servit à rien, le problème c'est que ton site a besoin de cette clé

Tu dois mettre ta clé dans une variable d'environnement depuis ton hebergeur, tu pourras ensuite la récupérer avec getenv() ou une superglobale $_SERVER ou $_ENV

Ensuite si tu veux pouvoir utiliser GitHub, il faudrait utiliser les github secrets, et mettre un fichier de configuration, trop compliqué à expliquer je te met le lien de la doc x)
https://docs.github.com/en/actions/reference/encrypted-secrets