ajout du reste

This commit is contained in:
sigma 2025-10-28 22:13:30 +01:00
parent 529fc55c4f
commit 840d285b2c

119
README.md
View File

@ -454,3 +454,122 @@ CREATE INDEX idx_vol_heure_depart ON t_vol(heure_depart);
Query OK, 0 rows affected (0.205 sec) Query OK, 0 rows affected (0.205 sec)
Records: 0 Duplicates: 0 Warnings: 0 Records: 0 Duplicates: 0 Warnings: 0
``` ```
## Utilisateurs et rôles
##### Création des rôles
```sql
CREATE ROLE 'administarteur';
CREATE ROLE 'gestionnaire_vols';
CREATE ROLE 'agent_reservation';
CREATE ROLE 'agent_comptoir';
CREATE ROLE 'analyste';
```
```sql
-- 1. Administrateur: Contrôle total [cite: 184]
GRANT ALL PRIVILEGES ON db_aeroport.* TO 'administrateur'@'localhost' WITH GRANT OPTION;
-- 2. Gestionnaire des Vols: Ajout/modif vols et programmes [cite: 192, 195-197]
GRANT INSERT, UPDATE ON db_aeroport.t_vol TO 'role_flight_manager'@'localhost';
GRANT INSERT, UPDATE ON db_aeroport.t_programme_vol TO 'role_flight_manager'@'localhost';
GRANT SELECT ON db_aeroport.t_avion TO 'role_flight_manager'@'localhost';
-- 3. Agent de Réservation: Gère passagers et réservations [cite: 199-204]
GRANT INSERT ON db_aeroport.t_passager TO 'role_booking_agent'@'localhost';
GRANT INSERT, UPDATE ON db_aeroport.t_reservation TO 'role_booking_agent'@'localhost';
-- Droits de lecture nécessaires pour travailler :
GRANT SELECT ON db_aeroport.t_passager TO 'role_booking_agent'@'localhost';
GRANT SELECT ON db_aeroport.t_vol TO 'role_booking_agent'@'localhost';
-- 4. Agent de Comptoir: Vérifie réservations, modifie siège [cite: 206-210]
GRANT SELECT ON db_aeroport.t_reservation TO 'role_counter_agent'@'localhost';
GRANT SELECT ON db_aeroport.t_passager TO 'role_counter_agent'@'localhost';
GRANT SELECT ON db_aeroport.t_vol TO 'role_counter_agent'@'localhost';
GRANT UPDATE (siege) ON db_aeroport.t_reservation TO 'role_counter_agent'@'localhost';
-- 5. Analyste: Lecture seule sur tout [cite: 216, 222]
GRANT SELECT ON db_aeroport.* TO 'role_analyst'@'localhost';
```
##### Création des utilisateurs et assignation des rôles
```sql
-- Création des utilisateurs
CREATE USER 'usr_admin'@'localhost' IDENTIFIED BY 'P@sswordAdmin123';
CREATE USER 'usr_flight_manager'@'localhost' IDENTIFIED BY 'P@sswordFlight123';
CREATE USER 'usr_booking_agent'@'localhost' IDENTIFIED BY 'P@sswordBooking123';
CREATE USER 'usr_counter_agent'@'localhost' IDENTIFIED BY 'P@sswordCounter123';
CREATE USER 'usr_analyst'@'localhost' IDENTIFIED BY 'P@sswordAnalyst123';
-- Assignation des rôles
GRANT 'role_admin'@'localhost' TO 'usr_admin'@'localhost';
GRANT 'role_flight_manager'@'localhost' TO 'usr_flight_manager'@'localhost';
GRANT 'role_booking_agent'@'localhost' TO 'usr_booking_agent'@'localhost';
GRANT 'role_counter_agent'@'localhost' TO 'usr_counter_agent'@'localhost';
GRANT 'role_analyst'@'localhost' TO 'usr_analyst'@'localhost';
-- Activer les rôles par défaut
SET DEFAULT ROLE ALL TO
'usr_admin'@'localhost',
'usr_flight_manager'@'localhost',
'usr_booking_agent'@'localhost',
'usr_counter_agent'@'localhost',
'usr_analyst'@'localhost';
FLUSH PRIVILEGES;
```
## Transaction
##### Cas 1
```sql
START TRANSACTION;
-- 1. Supprimer les réservations (table enfant)
DELETE FROM t_reservation
WHERE vol_fk = 25;
-- 2. Supprimer le vol (table parent)
DELETE FROM t_vol
WHERE vol_id = 25;
-- Valider les changements
COMMIT;
-- En cas d'erreur (gérée par un bloc TRY...CATCH en SQL procédural),
-- on utiliserait ROLLBACK;
```
##### Cas 2
```sql
START TRANSACTION;
SELECT COUNT(*) INTO @seat_taken
FROM t_reservation
WHERE vol_fk = 10 AND siege = '12A';
IF @seat_taken = 0 THEN
INSERT INTO t_reservation (passager_fk, vol_fk, siege, prix)
VALUES (5, 10, '12A', 250.00);
COMMIT;
ELSE
ROLLBACK;
END IF;
```
> `START TRANSACTION;` Démarre un bloc d'opérations
> ``
START TRANSACTION; : Démarre un bloc d'opérations atomiques.
SELECT COUNT(*)... : Elle vérifie d'abord si le siège '12A' est déjà pris (COUNT(*) > 0) sur le vol '10'. Le résultat (0 ou 1, ou plus) est stocké dans la variable @seat_taken.
IF @seat_taken = 0 THEN : Si la variable est à 0 (le siège est libre) :
INSERT INTO... : Elle insère la nouvelle réservation pour le passager 5 sur ce vol 10 à ce siège '12A'.
COMMIT; : La réservation est confirmée et la transaction se termine avec succès.
ELSE : Si @seat_taken n'est pas 0 (le siège est déjà occupé) :
ROLLBACK; : La transaction est annulée. L'INSERT n'a jamais lieu, et la base de données revient à son état initial, empêchant ainsi une double réservation.