Une table de clients sans nom : est-elle anonyme ?
Une donnée personnelle est une information qui concerne une personne que l'on peut identifier. La reconnaître est le premier geste de la protection des données : on ne protège bien que ce que l'on sait nommer.
Une boutique en ligne garde des clients dans une table. Retirez les noms : reste-t-il des données personnelles ? Cette leçon vous apprend à répondre.
À la fin de cette leçon
Remarque
Je peux dire si une colonne d'une table contient des données personnelles et de quel genre.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Donnée personnelle | une information sur une personne que l'on peut identifier | |
| Personne concernée | la personne dont parle la donnée | |
| Identifiant direct | une donnée qui désigne une personne à elle seule | courriel |
| Identifiant indirect | un indice qui ne désigne personne seul | ville |
| Recoupement | le fait de croiser plusieurs indices pour retrouver quelqu'un | |
| Donnée sensible | une donnée intime dont la fuite peut nuire gravement |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une donnée personnelle concerne une personne identifiable
Une donnée est personnelle quand elle se rapporte à une personne que l'on peut reconnaître, seule ou avec d'autres informations. Cette personne est la personne concernée.
La forme importe peu : un texte, un nombre, une date, une photo ou une adresse IP.
Une moyenne des ventes ne concerne personne. Un numéro de client concerne quelqu'un.
Regarder la table des clients du laboratoire
Votre laboratoire contient la base d'une boutique en ligne. Sa table customers décrit quarante clients inventés.
Lancez les deux premiers Runs pour préparer le terminal. Le troisième liste les colonnes de la table, dans l'ordre.
Accepter le certificat du serveur
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un nom court pour la boutique
alias sql='mariadb -h db -u student -pstudent shop -t -e'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lister les colonnes des clients
sql "SELECT COLUMN_NAME AS colonne FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'shop' AND TABLE_NAME = 'customers' ORDER BY ORDINAL_POSITION"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : classer les colonnes de la table customers
| Colonne | Ce qu'elle contient | Classement |
|---|---|---|
| first_name, last_name | Le prénom et le nom | Identifiant direct |
| L'adresse de messagerie | Identifiant direct | |
| phone | Le numéro de téléphone | Identifiant direct |
| id | Un numéro interne à la boutique | Direct pour qui détient la table |
| city, country | Le lieu de vie | Identifiant indirect |
| joined_on | La date d'inscription | Identifiant indirect |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Des indices isolés peuvent identifier quelqu'un ensemble
Une ville ne désigne personne. Un mois d'inscription non plus. Croisés, ils peuvent suffire : c'est le recoupement.
Plus on croise de colonnes, plus les groupes de clients se réduisent. Un groupe d'une seule personne désigne cette personne.
Les deux Runs comptent les clients qui sont seuls de leur groupe. Le premier groupe par ville, le second par ville et mois d'inscription.
Seuls dans leur ville
sql "SELECT COUNT(*) AS seuls FROM (SELECT 1 FROM customers GROUP BY city HAVING COUNT(*) = 1) AS t"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Seuls dans leur ville et leur mois
sql "SELECT COUNT(*) AS seuls FROM (SELECT 1 FROM customers GROUP BY city, DATE_FORMAT(joined_on, '%Y-%m') HAVING COUNT(*) = 1) AS t"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : plus on croise, plus on identifie
| Colonnes croisées | Clients seuls de leur groupe | Sur 40 clients |
|---|---|---|
| La ville | 2 | Presque personne |
| La ville et le mois d'inscription | 30 | Trois clients sur quatre |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu'une table sans nom ni courriel ne contient aucune donnée personnelle. C'est faux : une ville et une date suffisent souvent à retrouver quelqu'un. Demandez-vous : peut-on retrouver la personne, seul ou en croisant d'autres données ?
Certaines données sont sensibles
Une donnée sensible révèle un aspect intime : la santé, la religion, les opinions politiques ou l'origine. Sa fuite peut mener à une discrimination ou à une humiliation.
Le droit de la protection des données demande plus de précautions pour elles, et souvent une raison solide pour les collecter.
Un salaire ou une adresse ne sont pas sensibles dans ce sens, mais leur fuite reste grave.
À vous : classer des colonnes en Python
# Classer les colonnes d'une table de clients.
colonnes = ["courriel", "ville", "prix_panier", "sante"]
directes = ["nom", "prenom", "courriel", "telephone"]
indirectes = ["ville", "date_naissance"]
for colonne in colonnes:
if colonne in directes:
print(colonne, ": identifiant direct")
elif colonne in indirectes:
print(colonne, ": identifiant indirect")
else:
print(colonne, ": à examiner")
# À vous : ajoutez une liste sensibles = ["sante"] et un cas pour elle.