-- Script d'initialisation de la base de données MySQL -- Ce script est exécuté automatiquement par le conteneur MySQL au premier démarrage. -- Création de la base de données si elle n'existe pas CREATE DATABASE IF NOT EXISTS `cert_gestion` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Utilisation de la base de données USE `cert_gestion`; -- Table pour stocker les informations des utilisateurs CREATE TABLE IF NOT EXISTS `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(255) UNIQUE NOT NULL, -- Nom d'utilisateur unique `password` VARCHAR(255) NOT NULL, -- Mot de passe haché `role` ENUM('admin', 'user') DEFAULT 'user', -- Rôle de l'utilisateur (admin ou utilisateur simple) `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Date de création du compte ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Table pour stocker les périmètres fonctionnels CREATE TABLE IF NOT EXISTS `functional_perimeters` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) UNIQUE NOT NULL, -- Nom unique du périmètre fonctionnel `intermediate_cert_name` VARCHAR(255) UNIQUE NOT NULL, -- Nom du fichier du certificat intermédiaire associé `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Date de création du périmètre ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Table pour stocker les informations sur les certificats CREATE TABLE IF NOT EXISTS `certificates` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) UNIQUE NOT NULL, -- Nom du fichier du certificat (ex: www.example.com.pem) `type` ENUM('root', 'intermediate', 'simple') NOT NULL, -- Type de certificat `functional_perimeter_id` INT NULL, -- Clé étrangère vers functional_perimeters (NULL pour le certificat root) `expiration_date` DATETIME NOT NULL, -- Date d'expiration du certificat `is_revoked` BOOLEAN DEFAULT FALSE, -- Indique si le certificat est révoqué `revoked_at` DATETIME NULL, -- Date de révocation si révoqué `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Date de création du certificat FOREIGN KEY (`functional_perimeter_id`) REFERENCES `functional_perimeters`(`id`) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Table pour historiser les actions des utilisateurs CREATE TABLE IF NOT EXISTS `action_logs` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL, -- ID de l'utilisateur qui a effectué l'action `action_type` VARCHAR(50) NOT NULL, -- Type d'action (ex: 'login', 'create_cert', 'revoke_cert', 'create_user') `description` TEXT NOT NULL, -- Description détaillée de l'action `ip_address` VARCHAR(45) NOT NULL, -- Adresse IP de l'utilisateur `action_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Date et heure de l'action FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Note sur l'initialisation du premier administrateur et du certificat root: -- La création du premier compte administrateur et du certificat root -- sera gérée par l'application PHP au premier lancement pour des raisons de flexibilité et de sécurité. -- Le mot de passe de l'administrateur sera haché par l'application PHP.