IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Verouiller (définitivement) un enregistrement


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Points : 43
    Points
    43
    Par défaut Verouiller (définitivement) un enregistrement
    Bonjour à toutes et à tous

    Je vous expose mon problème:

    J'ai une application qui créé, puis modifié un enreg dans une table.
    A un moment donné, un utilisateur valide cet enregistrement. A partir de la, je voudrais mettre en place une sécurité au niveau sql server, qui interdit à quiquonque de modifier ou détruire cet enregistrement.
    Est ce possible ?

    Je me suis tourné vers les contraintes à un moment donné mais je n'ai pas trouvé. Est il possible de créer une contrainte sur une table qui interdit la modififcation d'un enreg si ce dernier contient une valeur particuliere pour un champ donné ?

    D'avance merci

    A+

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Ajoutez un champ de type BIT à votre table, qui vous permette de configurer quelles sont les valeurs supprimables et celles qui ne le sont pas.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    CREATE TABLE TEST
    (
    	ID TINYINT IDENTITY CONSTRAINT PK_TEST PRIMARY KEY,
    	val TINYINT NOT NULL,
    	estSupprimable BIT NOT NULL CONSTRAINT DF_TEST_estSupprimable DEFAULT 0
    )
    GO
     
    -- Seul 5 est supprimable
    INSERT INTO dbo.TEST(val) VALUES (1)
    INSERT INTO dbo.TEST(val) VALUES (2)
    INSERT INTO dbo.TEST(val) VALUES (3)
    INSERT INTO dbo.TEST(val) VALUES (4)
    INSERT INTO dbo.TEST(val, estSupprimable) VALUES (5, 1)
    GO
     
    SELECT *
    FROM dbo.TEST
    GO
     
    CREATE TRIGGER TR_IOF_D_TEST
    	ON dbo.TEST
    INSTEAD OF DELETE
    AS
    BEGIN
    	DECLARE @Err VARCHAR(256)
     
    	SELECT @Err = ISNULL(@Err, '') + CAST(val AS VARCHAR) + ', '
    	FROM DELETED
    	WHERE estSupprimable = 0
     
    	SET @Err = LEFT(@Err, LEN(@Err) - 1)
     
    	IF @Err IS NOT NULL
    	BEGIN
    		RAISERROR('Les valeurs "%s" ne sont pas supprimables', 16, 1, @Err)
    	END
     
    	-- Supprime tout de même les valeurs supprimables
    	DELETE FROM dbo.TEST
    	FROM dbo.TEST AS T
    	JOIN DELETED AS D ON T.ID = D.ID
    	WHERE T.estSupprimable = 1
    END
    GO
     
    -- retourne l'erreur 
    -- Msg*50000, Niveau*16, État*1, Procédure*TR_IOF_D_TEST, Ligne*17
    -- Les valeurs "1, 2, 3, 4" ne sont pas supprimables
    DELETE FROM dbo.TEST
    GO
     
    -- la valeur 5 n'est plus dans la table
    SELECT *
    FROM dbo.TEST
    GO
    @++

Discussions similaires

  1. Comment faire pour supprimer définitivement un enregistrement dans un fichier
    Par gryffondor8392 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/02/2011, 20h12
  2. [AC-2002] Verouiller une ligne (enregistrement) après validation
    Par Auron89 dans le forum IHM
    Réponses: 13
    Dernier message: 28/05/2010, 10h13
  3. Verouiller un enregistrement avec linq to sql
    Par boby62423 dans le forum Linq
    Réponses: 10
    Dernier message: 29/04/2009, 14h34
  4. Verouiller un enregistrement
    Par MisterDjoe dans le forum IHM
    Réponses: 4
    Dernier message: 18/04/2008, 19h56
  5. Visualisation d'un enregistrement verouillé
    Par oracliste dans le forum Oracle
    Réponses: 1
    Dernier message: 29/11/2005, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo