2009-01-23 17 views
1

Je fais partie d'une équipe qui crée une application web en utilisant PHP et MySQL. L'application aura plusieurs utilisateurs avec des rôles différents. L'application sera également utilisée de manière géographique.Définition des autorisations de base de données et de contrôle d'accès

En conséquence, nous devons créer un système de contrôle d'accès qui contrôle les autorisations d'utilisateur pour des enregistrements de base de données spécifiques, c'est-à-dire modifie les requêtes de base de données afin que seuls des enregistrements spécifiques soient affichés. Par exemple, pour un utilisateur au niveau de la ville, seuls les enregistrements relatifs à la ville de l'utilisateur doivent être affichés, alors que pour un utilisateur au niveau national, les enregistrements de TOUTES LES VILLES du pays doivent être affichés.

J'ai besoin d'aide pour concevoir un système capable de gérer ce type de récupération d'informations sans coder en dur les informations dans les requêtes SQL.

Toute aide serait appréciée.

Merci à l'avance

+0

+1 votre question est une bonne question. Elle concerne la façon de contrôler l'accès aux données hiérarchiques, qui est plus subtile qu'il n'y paraît au premier abord. –

Répondre

3

La conception de l'application varie en fonction des besoins de sécurité requis.

Par exemple, les informations sont-elles stockées dans plusieurs bases de données ou dans une base de données unique? Est-il important de présenter à chaque TYPE d'utilisateur un schéma de la base de données qui représente leurs autorisations particulières? Évidemment, les réponses à ces questions suggèrent si vous avez besoin d'un système plus sécurisé pour l'accès à la base de données ou non. Si tel est le cas, créez un utilisateur de base de données pour chaque type d'utilisateur qui existera dans le système. Fournissez à chaque utilisateur des autorisations pour les tables, vues, procédures appropriées, etc. Lorsqu'un utilisateur s'authentifie auprès du système, vous devez créer une connexion de base de données conditionnelle basée sur le type d'utilisateur pour cette personne.

Pour prendre le plus extrême possible, il peut également être approprié de contrôler l'accès à la base de données strictement par le biais de procédures stockées. Ensuite, chaque utilisateur de la base de données n'aurait accès qu'à son ensemble de procédures stockées. L'implémentation de la sécurité dans la base de données peut être pénible et augmenter la complexité de l'application ainsi que le coût de son maintien et diminue la cohésion globale de l'application IMO mais elle présente également un mur de sécurité très serré à quiconque voudra pirater ou abuser du système. Indépendamment de ce que vous implémentez dans la base de données à des fins de sécurité, vous devrez évidemment utiliser un mécanisme de session pour stocker l'utilisateur actuellement authentifié et son type. Un moyen facile de modifier la fonctionnalité d'un utilisateur particulier consiste à encapsuler les actions disponibles de chaque utilisateur (fonctions ou méthodes de lecture) et leurs attributs (ou propriétés) dans une classe pour représenter l'utilisateur spécifique. De cette façon, si deux personnes touchent Dashboard.php, elles verront précisément les données auxquelles elles ont accès.Enfin, vous pouvez contrôler certains des contrôles d'accès (et devrez probablement le faire) à travers les informations stockées sur l'utilisateur dans la base de données, telles que les villes dont ils ont besoin pour voir les informations ou les utilisateurs qu'ils supervisent. Utilisez ensuite ces informations pour créer des collections d'objets accessibles à partir de vos objets de domaine spécifiques à l'utilisateur.

1

Est-ce que les utilisateurs ont un accès direct au moteur de base de données? Évitez-le si vous le pouvez.

Faites en sorte que l'application se connecte à la base de données avec un compte d'utilisateur dédié qui lui fournit uniquement les autorisations dont l'application WHOLE a besoin. Effectuez le reste de la sécurité à l'intérieur de l'application en fonction des utilisateurs et des rôles définis par l'application et d'une API personnalisée simple.

Si ces utilisateurs peuvent avoir besoin d'accéder à plusieurs applications de ce type et de les utiliser, pensez à les stocker dans une base de données partagée séparée et demandez aux applications de les consulter à l'aide de l'API personnalisée partagée.