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

MS SQL Server Discussion :

Trigger for Select


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut Trigger for Select
    Bonjour,

    J'ai besoin de créer des triggers pour les select sur une base de données SQL Server et, d'après ce que j'ai lu un peu partout, il semble que ça ne soit pas possible alors que ça l'est dans Oracle.

    Avant d'abandonner SQL Server sur çe projet j'aurais bien aimé avoir une confirmation de votre part concernant l'impossibilité de créer ces déclencheurs.

    Accessoirement, si c'est annoncé dans le prochain SQL Serveur et compte tenu de la durée du projet, on peut attendre la release.

    D'avance merci pour votre aide,

    Salutations

    Laurent Jordi

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Il n'existe pas de déclencheur sur SELECT, mais on peut voir qui a fait des select sur n'importe quelle table, avec le contenu de la requête en utilisant CDC.

    Exemple :

    1) création d'une base et d'une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE DATABASE DB_SUIVI_SELECT;
    GO
     
    USE DB_SUIVI_SELECT
    GO
     
    CREATE TABLE dbo.T (C INT)
    GO
    2) mise en place de l'audit au niveau serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    USE master;
    GO
     
    -- création de l'audit
    CREATE SERVER AUDIT ADT_SELECT
        TO FILE ( FILEPATH = 'C:\temp\') ;
    GO
     
    -- activation de l'audit
    ALTER SERVER AUDIT ADT_SELECT
    WITH (STATE = ON) ;
    GO
    3) mise en place de l'audit niveau base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    USE DB_SUIVI_SELECT ;
    GO
     
    -- Création d'un événement à suivre, ici SELECT sur T
    CREATE DATABASE AUDIT SPECIFICATION ADS_SELECT_T
    FOR SERVER AUDIT ADT_SELECT
    ADD (SELECT
         ON dbo.T 
         BY dbo )
    WITH (STATE = ON) ;
    GO
    4) test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -- insertion
    INSERT INTO T VALUES (1), (2), (3);
    GO
     
    -- extraction
    SELECT * FROM T;
    SELECT C FROM T WHERE C % 2 = 0;
    5) résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -- voir ce qui a été fait en SELECT :
    SELECT event_time, statement
    FROM sys.fn_get_audit_file ('C:\temp\ADT_SELECT*',default,default)
    WHERE  action_id = 'SL';
    GO
     
    event_time             statement
    ---------------------- -----------------------------------
    2012-01-05 16:36:29.10 SELECT * FROM T;
    2012-01-05 16:36:29.11 SELECT C FROM T WHERE C % 2 = 0;
    Il est bien sur possible d'obtenir d'autres informations, par exemple qui à fait quoi...

    Une chose est sûr c'est que c'est asynchrone et qu'il faut aller scruter le fichier table régulièrement...

    je l'ai mis en place pour la traçabilité dans le domaine de la santé...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    J'ai besoin de créer des triggers pour les select sur une base de données SQL Server et, d'après ce que j'ai lu un peu partout, il semble que ça ne soit pas possible alors que ça l'est dans Oracle.
    Ah bon ?
    Ayant pose la question a un collegue (qui est ACE oracle), il n'avait pas l'air trop au courant...
    Et base sur cette source, il ne semble pas non plus que ce soit possible:
    https://forums.oracle.com/forums/thr...readID=1554647

    Auriez vous de la documentation concernant votre affirmation ?

    Edit:
    Ceci y ressemble de loin...
    http://technology.amis.nl/blog/810/s...ained-auditing

  4. #4
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    En en rediscutant aujourd'hui, j'ai eu une seconde confirmation que les triggers on select n'existent pas.
    De plus le FGA (Fine grained Auditing) fait partie du package Oracle Audit Vault qui d'apres cet article coute 50000$ par processeur.
    http://www.networkworld.com/news/200...-database.html

    Autre question:
    Comment devrait se comporter un tel trigger dans une jointure ?!

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Ptit_Dje Voir le message
    En en rediscutant aujourd'hui, j'ai eu une seconde confirmation que les triggers on select n'existent pas.
    De plus le FGA (Fine grained Auditing) fait partie du package Oracle Audit Vault qui d'apres cet article coute 50000$ par processeur.
    C'est quand même beaucoup moins cher chez MS puisque l'audit est inclus dans la version Standard sous la forme Change Tracking et dans la version Enterprise sous la forme Change Tracking + CDC (Change Data Capture).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. équivalent d'un trigger avec "select"
    Par olivanto dans le forum PL/SQL
    Réponses: 4
    Dernier message: 21/01/2008, 15h11
  2. [ASE 15.0.2][T-SQL] FETCH INTO ROWTYPE (declare cursor for select *)
    Par msomso dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 26/09/2007, 16h05
  3. trigger sur select
    Par Monstros Velu dans le forum Développement
    Réponses: 1
    Dernier message: 05/04/2006, 12h34
  4. Annuler seulement certaines actions d'1 trigger for each row
    Par thebloodyman dans le forum Oracle
    Réponses: 8
    Dernier message: 28/02/2005, 14h17
  5. Trigger sur select
    Par bilo2000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2004, 13h39

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