2010-09-29 14 views
3

Le problèmeMaintenir la conformité HIPAA Utilisation des vues dans MySQL

Nous avons une grande application Web qui stocke et affiche les données sensibles liées HIPAA. Nous étudions actuellement des moyens d'améliorer la conformité à la loi HIPAA et de réduire le risque d'infraction.

Actuellement, plusieurs fonctionnalités et rapports ne limitent pas correctement les informations client en fonction des autorisations de la personne qui s'est connectée (par exemple, la fonction de recherche de client et certains rapports hérités).

Solutions possibles

Prenez soin du problème du point de vue programatic

On peut toujours tout réécrire les sections du code qui sont à l'origine de la non-conformité. Le problème, c'est que cette approche est très sujette aux erreurs compte tenu de l'échelle de l'application - des choses pourraient être ratées.

Modifier la base de données pour restreindre les données qui sont retournées

Nous pourrions modifier la structure de base de données MySQL pour tenir compte des restrictions d'autorisation nécessaires nécessaires dans l'application. De cette façon, personne ne peut voir les données qu'ils ne devraient pas voir parce que la base de données ne retournera pas les données qu'ils ne devraient pas voir.

Ma question

L'application elle-même a près de 300 tables, dont la plupart stockent une sorte de données sensibles. Est-il possible (et faisable) d'utiliser les vues MySQL pour restreindre l'accès aux données?

Si oui, quelle est la meilleure approche?

Répondre

3

Vous pouvez utiliser une vue pour restreindre ou présenter les données que vous souhaitez simplement en modifiant la requête utilisée dans la vue.

Vous devrez renommer la table d'origine, à quelque chose comme "table d'origine", puis nommez votre vue le nom de la table d'origine.

Votre programme ne saura pas qu'il est en train d'accéder à une vue plutôt qu'à une table. Il continuera à tirer des données comme avant. Vous pouvez également inclure des valeurs vierges ou par défaut pour les champs pour lesquels vous ne souhaitez pas renvoyer des valeurs réelles. A titre d'exemple (si vous avez un champ "DOB" et que vous ne souhaitez plus renvoyer la date de naissance, vous pouvez simplement écrire '01 -01-2001 'comme date de naissance).

Vous pouvez utiliser les exemples du site Web de MYSQL pour créer une vue.

CREATE TABLE t (qty INT, price INT); 
mysql> INSERT INTO t VALUES(3, 50); 
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t; 
mysql> SELECT * FROM v; 

http://dev.mysql.com/doc/refman/5.0/en/create-view.html