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

PL/SQL Oracle Discussion :

Création de trigger after logon database


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2011
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 150
    Par défaut Création de trigger after logon database
    Bonjour,

    J'ai un script tout simple de création de trigger qui se déclenche après toute connexion sur la base.
    La création du trigger s'est bien passée, ensuite j'ai essayé de me connecter avec une session mais la table qui contient les connexions user et date est vide.

    Avez-vous une idée ?

    Code sql : 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
    drop table logon_table;
     
    create table logon_table
    (
            user_connect    varchar2(30),
            date_connect    date
    )
    tablespace tools;
     
    create or replace trigger trigger_logon_database
      after logon on database
    begin
      insert into logon_table (user_connect,date_connect) values(user,to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
      commit;
    end;
    /
    Merci beaucoup.

    David.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Par défaut
    Mon premier reflexe est de voir si les types sont identiques. Mais je vois que tu fais un TO_CHAR pour la date de connexion alors que ton type est DATE.

    Essaye de faire un TO_DATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into logon_table (user_connect,date_connect) values(user, sysdate);

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne sais pas si c'est la cause de votre problème, mais votre table de logon contient une date, et vous lui envoyez une chaîne de caractères.

    Essayez donc avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER trigger_logon_database
      after logon ON DATABASE
    begin
      INSERT INTO logon_table (user_connect, date_connect) VALUES (user, sysdate);
      commit;
    end;
    /

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Par défaut
    A ouai c'est mieux ça ! Faire un TO_DATE(SYSDATE) ça risque de faire ! Je corrige dans mon post précédent tout de suite pour pas laisser de vilaine chose !

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Si l'utilisateur a les droits DBA, le trigger after logon n'est pas déclenché.

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2011
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 150
    Par défaut
    Merci tout le monde ça a marché.

    Je voudrais juste ajouter d'autres infos dans la table comme par exemple quel programme utilisé avec quel poste.
    Voici le trigger que j'ai compilé avec l'erreur suivante :
    10/2 PL/SQL: SQL Statement ignored
    11/20 PL/SQL: ORA-00942: table or view does not exist
    Ci-dessous le code :
    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
    drop table connect_user;
     
    create table connect_user
    (
            nom_ora         varchar2(15),
            nom_os          varchar2(15),
            programme       varchar2(20),
            poste           varchar2(20),
            date_time       date,
            textsql         varchar2(60)
    )
    tablespace tools;
     
    CREATE OR REPLACE TRIGGER trig_logon_user
    AFTER LOGON ON DATABASE
    DECLARE
            v_username     varchar2(15); 
            v_osuser         varchar2(15); 
            v_program       varchar2(15); 
            v_machine       varchar2(20); 
            v_logontime     date; 
            v_sqltext         varchar2(60);
     
    begin
            select USERNAME ,osuser,program ,machine ,logon_time ,sql_text into    v_username,v_osuser,v_program,v_machine,v_logontime,v_sqltext
            from gv$session s,gv$sql gs
            where gs.sql_id=s.sql_id
            and s.username in ('ADA','SYSTEM');
     
            insert into connect_user(nom_ora,nom_os,programme,poste,date_time,textsql) values(v_username,v_osuser,v_program,v_machine,v_logontime,v_sqltext);
    end trig_logon_user;
    /
    Merci à tous.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Par défaut
    Je mettrais pas ma main à couper mais j'irais voir du côté des droits sur ces tables. Je te dis ça parce que j'ai la même réponse et mes droits sont ultra bridés sur ce genre de tables qui sont très souvent réservé aux admins.

    Pour ce qui est de la gestion des droits il faut demander à quelqu'un de bien plus expert que moi mais en gros je crois ne pas être très loin du concept en disant ceci :
    • Créer un package qui gére les "get" de toutes les infos session dont tu as besoin avec un utilisateur ayant les droits suffisants sur ces tables.
    • Donner les droits aux users "Monsieur tout le monde" sur le package mais pas sur les tables.

    Ainsi "monsieur tout le monde" sait avoir accés aux infos de manière controlé.

    Quelqu'un peut confirmer/infirmer ?

Discussions similaires

  1. Trigger after logon
    Par Oratorio dans le forum Oracle
    Réponses: 1
    Dernier message: 04/04/2013, 10h12
  2. Réponses: 0
    Dernier message: 23/12/2011, 09h58
  3. Trigger AFTER LOGON ON SCHEMA
    Par romu92 dans le forum SQL
    Réponses: 8
    Dernier message: 01/02/2010, 17h48
  4. [8i] trigger after logon
    Par apersonnat dans le forum Administration
    Réponses: 4
    Dernier message: 19/11/2009, 14h13
  5. [9i] problème avec trigger after logon
    Par Michael# dans le forum Oracle
    Réponses: 2
    Dernier message: 17/03/2005, 12h14

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