L’identification et la gestion des données sensibles dans une base de données sont des enjeux cruciaux pour la sécurité et la conformité des applications. Laravel propose une approche élégante pour marquer ces données directement au niveau du schéma de la base, en utilisant les commentaires de colonnes.
Les bases de données telles que MySQL et PostgreSQL permettent d’ajouter des commentaires aux colonnes, offrant ainsi un moyen de documenter le schéma. Laravel exploite cette fonctionnalité via la méthode comment()
dans ses migrations. Par exemple, pour indiquer qu’une colonne contient des données sensibles, on peut écrire :
$table->string('email')->comment('sensitive_data=true');
Cette annotation simple permet de signaler explicitement la nature sensible de la colonne, facilitant ainsi les audits et les traitements spécifiques.
Pour les applications existantes, il est possible de créer une migration dédiée pour ajouter ces commentaires aux colonnes concernées. Voici un exemple de migration modifiant plusieurs colonnes :
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('email')->comment('sensitive_data=true')->change();
$table->string('name')->comment('sensitive_data=true')->change();
$table->string('password')->comment('sensitive_data=true')->change();
});
}
Une fois ces commentaires en place, il devient aisé de repérer toutes les colonnes marquées comme sensibles. En MySQL, une requête sur la table INFORMATION_SCHEMA.COLUMNS permet de les lister :
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_COMMENT LIKE '%sensitive_data=true%';
Cette capacité à identifier rapidement les colonnes sensibles est particulièrement utile lors de l’exportation de données, de la création de clones de base de données ou pour répondre à des demandes d’accès aux données personnelles.
Pour aller plus loin, on peut implémenter un trait dans les modèles Eloquent afin de récupérer dynamiquement les colonnes sensibles d’un modèle donné. Voici un exemple en PHP :
namespace App\Models\Concerns;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
trait InteractsWithSensitiveColumns
{
public function getSensitiveColumns(): Collection
{
return $this->getConnection()
->table('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME', $this->getTable())
->where('COLUMN_COMMENT', 'like', '%sensitive_data=true%')
->pluck('COLUMN_NAME');
}
}
En intégrant ce trait dans un modèle, on peut facilement obtenir la liste des colonnes sensibles associées, ce qui facilite la mise en place de logiques spécifiques, comme le masquage ou l’exclusion de ces données lors de certaines opérations.
Il est important de noter que cette approche repose sur les fonctionnalités spécifiques de certaines bases de données. Ainsi, elle est pleinement fonctionnelle avec MySQL et PostgreSQL, mais peut ne pas être compatible avec d’autres systèmes ne supportant pas les commentaires de colonnes.
En conclusion, l’utilisation des commentaires de colonnes dans Laravel offre une méthode simple et efficace pour marquer et gérer les données sensibles au sein d’une application. Cette pratique améliore la documentation du schéma, facilite les audits de sécurité et permet une gestion plus fine des données personnelles, contribuant ainsi à renforcer la conformité et la protection des utilisateurs.
Source
- Paul Redmond - Using Database Comments to Track Columns With Sensitive Data