-- ============================================================ -- DATA SENTINEL — Création / réinitialisation du compte « Juré » -- Auteur : COYAUD Anthony -- Version : 1.1 — Août 2026 -- -- Compte Admin destiné aux personnes qui consultent l'application -- (évaluateurs, jury, démonstration). -- -- identifiant : Juré -- mail : JURE@NEXA.com -- mot de passe : 123456 -- rôle : Admin -- -- Script idempotent : il peut être rejoué sur une base déjà déployée -- sans dupliquer le compte ni toucher aux autres utilisateurs. -- Prérequis : data_sentinel_auth.sql déjà exécuté ([USER] + JOURNAL_AUDIT). -- -- Pas d'instruction USE : la base cible vient du paramètre -d de la -- connexion, et le garde-fou ci-dessous interrompt le script si ce -- n'est pas la bonne. Tout tient dans un seul lot (aucun GO), sans -- quoi le RETURN du garde-fou n'empêcherait pas la suite de tourner. -- -- Exécution : -- sqlcmd -S -d -U -P -C -b -f 65001 \ -- -i sql/create_admin_jure.sql -- ============================================================ SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @base NVARCHAR(128) = DB_NAME(); IF OBJECT_ID('[USER]', 'U') IS NULL OR OBJECT_ID('JOURNAL_AUDIT', 'U') IS NULL BEGIN RAISERROR( 'ARRET : base incorrecte (%s). [USER] ou JOURNAL_AUDIT est introuvable. Reconnectez-vous sur la base Data Sentinel (option -d).', 16, 1, @base); RETURN; END -- Hachage bcrypt (coût 12) du mot de passe de démonstration. -- Généré avec passlib.CryptContext(schemes=["bcrypt"]) — même librairie que auth.py. DECLARE @username NVARCHAR(100) = N'Juré'; DECLARE @email NVARCHAR(200) = N'JURE@NEXA.com'; DECLARE @password_hash NVARCHAR(255) = N'$2b$12$nnWMOCjSiUq4rAyPGbC3W.HGdsvWKu9kEfLst6zBIEIcsgP97W94m'; BEGIN TRY BEGIN TRANSACTION; IF EXISTS (SELECT 1 FROM [USER] WHERE username = @username) BEGIN UPDATE [USER] SET email = @email, password_hash = @password_hash, role = N'Admin', actif = 1 WHERE username = @username; INSERT INTO JOURNAL_AUDIT (id_user, username, action, detail) SELECT id_user, username, 'RESET_PASSWORD', 'Compte de visite reinitialise (script SQL)' FROM [USER] WHERE username = @username; PRINT 'Compte "Jure" deja present -> mis a jour.'; END ELSE BEGIN INSERT INTO [USER] (username, email, password_hash, role, actif) VALUES (@username, @email, @password_hash, N'Admin', 1); INSERT INTO JOURNAL_AUDIT (id_user, username, action, detail) SELECT id_user, username, 'CREATE_USER', 'Compte de visite cree (script SQL)' FROM [USER] WHERE username = @username; PRINT 'Compte "Jure" cree.'; END COMMIT TRANSACTION; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; PRINT 'ECHEC : ' + ERROR_MESSAGE(); THROW; END CATCH -- Vérification SELECT id_user, username, email, role, actif, created_at, last_login FROM [USER] WHERE username = N'Juré';