2016-04-26 2 views
1

Comment les personnes ont-elles utilisé une approche lors de l'exécution de rapports ou même simplement en sélectionnant plusieurs enregistrements d'une base de données?Avec ABAC/XACML, comment protégez-vous les ressources dans les rapports/grands ensembles de résultats?

Par exemple, si vous avez une politique qui stipule:

Les médecins ne peuvent voir les patients dans leur hôpital

Il est évident que le moyen efficace de mettre en œuvre est d'inclure un filtre dans votre requête (where hospital = XXX), mais cela semble rompre avec le principe d'ABAC car il introduit la règle dans le SQL lui-même.

Je sais que Axiomatics offre un mécanisme de requête inverse qui génère apparemment des filtres pour vous en fonction des règles - mais mon système a beaucoup de SQL complexe qui devrait être refactorisé un peu pour fonctionner avec cela.

Comment d'autres personnes ont-elles géré ce problème?

Répondre

1

Il existe essentiellement trois façons de résoudre ce:

  1. Via un mécanisme de requête inverse que vous avez fait allusion. C'est en effet seulement pris en charge par Axiomatics pour le moment. L'idée derrière une requête inverse est qu'au lieu de spécifier une question à part entière, par ex. "Can Alice view document #123?", vous pouvez spécifier une question ouverte, par ex. "Which documents can Alice view?".
  2. Via le profil de décision multiple de XACML 3.0 qui vous permet de poser plusieurs questions en une fois, par ex. "Est-ce qu'Alice peut voir DoC# 1, # 2, # 3?". Le MDP est pratique pour des centaines d'articles au maximum. Vous pouvez le combiner avec une stratégie de pagination. Vous pouvez lire plus sur MDP here.
  3. Via l'utilisation d'obligations. Vous pouvez écrire une politique qui dit que dans son ensemble, un médecin a le droit de consulter les dossiers médicaux + obligation d'exécuter une déclaration SQL filtre. Le problème avec cette approche est qu'elle place la sémantique d'autorisation dans l'obligation plutôt que dans la politique. De plus, que se passe-t-il si plusieurs obligations sont déclenchées?
+0

Merci David. J'ai lu beaucoup de vos commentaires/messages au cours de la semaine dernière et j'espérais que vous verriez cela. – jbd

+0

J'ai l'impression que c'est un problème inhérent à l'autorisation en général. Je considère une approche, où le point d'interception se produit avant d'exécuter réellement la requête. Par exemple, déterminez si Alice peut voir les documents à l'hôpital X. Si oui, autorisez l'exécution de la requête. Essentiellement, la requête elle-même devient la ressource que le sujet veut exécuter. Des commentaires sur cette approche? Je suis sûr que d'autres l'ont fait. – jbd

+0

J'ai ajouté une nouvelle approche à la réponse. Vous avez raison de dire qu'il existe deux niveaux de contrôle d'accès: le niveau fonctionnel (vous avez le droit de récupérer l'ensemble des dossiers médicaux) et le niveau de données (vous ne pouvez consulter que les dossiers dans votre service) –