Raise_application_error in after-logon-trigger

Hi,
I try to build a
after logon on database trigger,
this should execute some inserts into an audit-table, and if some conditions are not given, I want the user to be disconnected.
In this forum I found this thread with a trigger similar to my needs:
To prevent TOAD access
But RAISE_APPLICATION_ERROR in this trigger does not cancel the session and so the user stays connected to oracle. Now I am searching for a disconnect-statement!
Wolfram

Wolfram,
What we have here is
- a post without a 4 digit database version. Most questions have a version specific answer. The behavior you describe does not apply to all versions, and might even apply to SYSDBA connected users only. Is everyone connecting as SYSDBA?
- a post without a proper description of what the trigger does, and without a proper description of the business need. This is especially important as you seem to re-invent AUDIT CONNECT.
- a post from someone who already thinks he knows the answer.
Rest assured: there is no disconnect statement in PL/SQL
You would really need to come up with more details
- database version, 4 digits
- the actual trigger code
- what you are trying to accomplish in terms of business requirements
- why you can't use AUDIT
Sybrand Bakker
Senior Oracle DBA

Similar Messages

  • Closing DBA session in AFTER LOGON trigger

    Hello *,
    this is my first question here and my first piece of code in oracle so please don't laugh ;-)
    I'm trying to create an AFTER LOGON trigger which disconnects a user if he/she tries to log in from an incorrect host.
    What should happen?
    User tries to connect.
    If he/she is permitted, a record is added to a table.
    If not, a record is added to another table and the user is disconnected using RAISE_APPLICATION_ERROR().
    After a number of issues I've got it working, except ... I have the feeling that RAISE_APPLICATION_ERROR() doesn't effect users with DBA privileges.
    Finally, I'm testing it with one ordinary user - DEF.
    The main idea is to disallow connections from user ABC which has DBA privileges.
    Tests using DEF are successful but when ABC tries to log in from an incorrect host, a record is added in pcbaudit_failed_logins but the user is not disconnected.
    The database is 9.2.0.8.0 and I'm prepared to post RDA report if it is required.
    Thank you for your help in advance - I hope I was kind enough :P
    Here's the code for the trigger:
    DROP TABLE pcbaudit_users;
    CREATE TABLE pcbaudit_users (username VARCHAR2(32) NOT NULL, host VARCHAR2(64) NOT NULL);
    CREATE INDEX idx_pcbaudit_users_username ON pcbaudit_users(username);
    CREATE INDEX idx_pcbaudit_users_host ON pcbaudit_users(host);
    DROP TABLE pcbaudit_logins;
    CREATE TABLE pcbaudit_logins (username VARCHAR2(32), ip_address VARCHAR2(15), host VARCHAR2(64), ts DATE);
    DROP TABLE pcbaudit_failed_logins;
    CREATE TABLE pcbaudit_failed_logins (username VARCHAR2(32), ip_address VARCHAR2(15), host VARCHAR2(64), ts DATE);
    CREATE OR REPLACE PUBLIC SYNONYM pcbaudit_users FOR sys.pcbaudit_users;
    CREATE OR REPLACE PUBLIC SYNONYM pcbaudit_logins FOR sys.pcbaudit_logins;
    CREATE OR REPLACE PUBLIC SYNONYM pcbaudit_failed_logins FOR sys.pcbaudit_failed_logins;
    GRANT SELECT ON sys.pcbaudit_users TO public;
    GRANT INSERT ON sys.pcbaudit_logins TO public;
    GRANT INSERT ON sys.pcbaudit_failed_logins TO public;
    INSERT INTO pcbaudit_users VALUES ('SYS', '%');
    INSERT INTO pcbaudit_users VALUES ('SYSTEM', '%');
    INSERT INTO pcbaudit_users VALUES ('ABC', '%');
    INSERT INTO pcbaudit_users VALUES ('DEF', '%');
    COMMIT;
    CREATE OR REPLACE
    TRIGGER logon_pcbaudit_trigger AFTER LOGON ON DATABASE
    DECLARE
         v_username     VARCHAR2(32); /* variable that will hold current username */
         v_host          VARCHAR2(4000); /* variable that will hold current host */
         v_allowed     NUMBER(1) := 0;
         PRAGMA          AUTONOMOUS_TRANSACTION;
    BEGIN
         SELECT     UPPER(USER), /* current user */
              UPPER(SYS_CONTEXT('USERENV', 'HOST')) /* current user host */
         INTO     v_username,
              v_host
         FROM     dual;
         /* debug */
    --     DBMS_OUTPUT.PUT_LINE(v_username || '@' || v_host);
         SELECT     1
         INTO     v_allowed
         FROM     pcbaudit_users
         WHERE     UPPER(username) = v_username
    AND (
                   UPPER(REPLACE(v_host, CHR(0), '')) LIKE UPPER(host) ESCAPE '!' /* fuck that shit! Something appends CHR(0) to its host... */
                   OR
                   v_host IS NULL /* fuck that shit! Some hosts are NULLs! */
    /* write log (user has logged in!) */
    INSERT
    INTO pcbaudit_logins
    (username, ip_address, host, ts)
    VALUES
    (v_username, SYS_CONTEXT('USERENV', 'IP_ADDRESS'), v_host, SYSDATE);
    COMMIT;
    EXCEPTION
         WHEN     NO_DATA_FOUND     THEN /* occurs when no matches were found; i.e. current username is not permitted to login from the current host */
              /* log the failed attempt */
              INSERT
              INTO     pcbaudit_failed_logins
              (username, ip_address, host, ts)
              VALUES
              (v_username, SYS_CONTEXT('USERENV', 'IP_ADDRESS'), v_host, SYSDATE);
    COMMIT;
              /* disconnect user */
              RAISE_APPLICATION_ERROR(-20001, v_username || '@' || v_host || ' is not allowed to connect.');
         WHEN     OTHERS THEN
              NULL; /* in this case, NULL is better than an error - if an error occurs, user will not be able to login. */
    END;

    Thank you for your reply!
    The situation is quite complicated.
    I am aware that a user with DBA privileges can drop the trigger, modify it, etc.
    There's an application on top of it and (i don't know why) it requires dba privileges. The point is, there are developers with access to the production database and my task is to stop them from logging in with this username.
    Since I'm creating a trigger, I've obviously have no other choice. I can't change the user's password because of number of reasons, I can't deny developers' IP addresses using sqlnet.ora because they need read-only access and so on.
    I realize that this is not the way that things are being done (development cycle), but I have no other choice.
    So, is there any other way?

  • Insufficient privileges using execute immediate in after logon trigger

    I have an after logon trigger that executes a package/procedure in the schema it was created in.
    One of the procedures runs the following:
    EXECUTE IMMEDIATE 'AUDIT INSERT TABLE, UPDATE TABLE, DELETE TABLE, EXECUTE PROCEDURE BY ' || USER;
    The procedure is throwing an insufficient privileges error when executing this.
    However - the schema owner has audit any and audit system privileges and - the statement works fine independently.
    When I login as another user this issue arises. The package/procedure are created with definers rights... So - i'm not sure why this is happenening.
    Any help is appreciated.

    privileges acquired via ROLE do NOT apply within named PL/SQL procedures.
    SQL> SET ROLE NONE
    SQL> --issue AUDIT again now                                                                                                                                                                                                                                                               

  • Error In After Logon Trigger

    Hi,
        I am using Release 11.2.0.3.0 of oracle.
    I have created a trigger for restricting specific users(logging from specific program and having specific OSUSER) from loging into the database.
    I created below trigger in SYS schema.
    CREATE OR REPLACE TRIGGER t1
    AFTER
    LOGON
    ON DATABASE
    DECLARE
    trg_program varchar2(4000);
    trg_user varchar2(4000);
    trg_osuser varchar2(4000);
    v_killsession  VARCHAR2(4000);
    v_sid   VARCHAR2(4000);
    v_serial   VARCHAR2(4000);
    BEGIN
    SELECT UPPER (program), UPPER (USERNAME), UPPER (OSUSER),SID,serial#
      INTO trg_program, trg_user, trg_osuser,v_sid,v_serial
      FROM v$session
    WHERE audsid = SYS_CONTEXT ('USERENV', 'SESSIONID') AND ROWNUM = 1;
    IF  trg_program IN ('SQLPLUS.EXE','SQLPLUSW.EXE','TOAD.EXE')
        AND  trg_user in ('USER1','USER2')--,'SYS','SYSTEM')
        --AND trg_osuser  not in ('O12345')
    THEN
           raise_application_error(-20001,'You are not authorized to connect to this schema directly!!');
    END IF;   
    END;
    when i am logging into USER1 through sqlplus/toad it works fine, i am getting required message which is mentioned as 'raise application error'
    but when i am compiling the trigger by uncommenting extra condition for OSUSER i.e trg_osuser  not in ('O12345') in the trigger code, so that it wont affect the highly provileged user(i.e OSUSER O12345).During logging in to user USER1 i am getting below error
    ERROR:
    ORA-04045: errors during recompilation/revalidation of
    XIGNCMN.RESTRICT_UNAUTH_ACCESS
    ORA-01031: insufficient privileges
    it should alow me to login because i am OSUSER 'O12345', so why its not working?

    Thanks John.
    Actually currently we are having database server installed in each of the developers machine so having DBA privilege and having business data, thats why i am planning to configure common database to which all will connect and i wont allow them to connect to the database directly through the functional schema(2 schemas). Now i am planning to restrict the developers access to only 'SELECT+DMLS' for the functional schema and i will do that by creating another user through which they will get connected to the actual functional schema with restricted privilege.
    But here the issue is that, for JAVA application, they are having local source code in each of their machine and will also need the connection string/password for the functional schema, so they will know the password for the functional schema, but i want to restrict their access through all the program except 'Jdbc thin client' so i thought of above trigger.
    kindly suggest if any other way out?

  • Trace users by after logon trigger

    Hi.
    I have to trace some users application to find the source of problems.
    Oracle8i Enterprise Edition Release 8.1.7.0.0
    connect system/manager@testdb
    create or replace trigger login_trigger
    after logon on database
    begin
    if (USER in ('BLAKE','SCOTT')) then
    execute immediate
    'ALTER SESSION SET EVENTS ''10046 TRACE NAME CONTEXT FOREVER, LEVEL 12''';
    end if;
    end;
    show error;
    SQL> connect scott/tiger@testdb
    ERROR:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-01031: insufficient privileges
    ORA-06512: at line 3
    OK, I'll grant a priv.
    SQL> connect system/manager@testdb
    SQL> GRANT administer DATABASE TRIGGER TO "SCOTT";
    SQL> connect scott/tiger@testdb
    Connected.
    Good, only *.trc file is empty after that and there is no trace information for analyse.
    Could you please give me a solution?
    Mikhail

    can't find any *.trc & alert files relevant current time 20080329:20.34
    only this
    29.03.2008 18:20 72 583 nmuALRT.LOG
    25.03.2008 22:22 600 nmuARC0.TRC
    but the last connection I've made
    20080329:20.34
    SQL> connect SCOTT/[email protected]
    ERROR:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-01031: insufficient privileges
    ORA-06512: at line 3
    this is the files
    ---nmuALRT.LOG---
    Dump file C:\oracle\admin\nmu\bdump\nmuALRT.LOG
    Sat Mar 22 17:58:46 2008
    ORACLE V8.1.7.0.0 - Production vsnsta=0
    vsnsql=e vsnxtr=3
    Windows 2000 Version 5.1 Service Pack 2, CPU type 586
    Starting up ORACLE RDBMS Version: 8.1.7.0.0.
    System parameters with non-default values:
    processes = 150
    shared_pool_size = 52428800
    large_pool_size = 614400
    java_pool_size = 20971520
    control_files = C:\oracle\oradata\nmu\control01.ctl, C:\oracle\oradata\nmu\control02.ctl, C:\oracle\oradata\nmu\control03.ctl
    db_block_buffers = 19200
    db_block_size = 8192
    compatible = 8.1.0
    log_buffer = 32768
    log_checkpoint_interval = 10000
    log_checkpoint_timeout = 1800
    db_files = 1024
    db_file_multiblock_read_count= 8
    max_enabled_roles = 30
    remote_login_passwordfile= EXCLUSIVE
    global_names = TRUE
    distributed_transactions = 500
    instance_name = nmu
    service_names = nmu
    mts_dispatchers = (PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)
    open_links = 4
    sort_area_size = 65536
    sort_area_retained_size = 65536
    db_name = nmu
    open_cursors = 300
    os_authent_prefix =
    job_queue_processes = 0
    job_queue_interval = 10
    parallel_max_servers = 5
    background_dump_dest = C:\oracle\admin\nmu\bdump
    user_dump_dest = C:\oracle\admin\nmu\udump
    max_dump_file_size = 10240
    oracle_trace_collection_name=
    Sat Mar 29 18:20:39 2008
    Errors in file C:\oracle\admin\nmu\udump\ORA02288.TRC:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-01031: insufficient privileges
    ORA-06512: at line 3
    ---nmuARC0.TRC-----------------------------------------
    Dump file C:\oracle\admin\nmu\bdump\nmuARC0.TRC
    Tue Mar 25 22:22:38 2008
    ORACLE V8.1.7.0.0 - Production vsnsta=0
    vsnsql=e vsnxtr=3
    Windows 2000 Version 5.1 Service Pack 2, CPU type 586
    Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
    With the Partitioning option
    JServer Release 8.1.7.0.0 - Production
    Windows 2000 Version 5.1 Service Pack 2, CPU type 586
    Instance name: nmu
    Redo thread mounted by this instance: 0 <none>
    Oracle process number: 14
    Windows thread id: 2592, image: ORACLE.EXE
    *** SESSION ID:(11.1) 2008-03-25 22:22:38.428
    *** 2008-03-25 22:22:38.428

  • Calling set_context() outside after logon trigger?

    Hello all
    I'm trying out and learning on using the application context so I tried out the tutorials from: Oracle® Database Security Guide 11g Release 1 (11.1) B28531-06 document (well, very similar examples that is)
    I made a procedure which should retreive the employee_id based on the provided user_name (a logical user_name stored in a table) and set an (attribute, value) pair using the dbms_session.set_context()...
    select employee_id into emp_id from user_pswd_table where user_name like p_user_name;
    DBMS_SESSION.SET_CONTEXT('employee_id_ctx', 'employee_id', emp_id);
    and (the tester) the call of the procedure looked like something like this:
    declare usernm varchar2(30);
    begin
    usernm :='user_name_which_will_be_provided';
    set_employee_id_pck.set_employee_id_ctx(usernm);
    end;
    but as it seams like it is only working if the call is made from the after logon on database trigger...if that's the case after the next log on I have the needed information retrieved with select sys_context(...) from dual, but if that's not the case if I call that procedure from anywhere else it results with no_data_found.
    Could someone please explain to me why is that???
    Thx in advance :D
    Ildiko

    Sorry Frank, the message for Ildiko.
    You found below context example
    Login with  user  scott :
    -- creation table  dossiers
    SQL> connect scott/tiger@oratest
    Connected.
    --creation de la table dossiers
    CREATE TABLE DOSSIER(
      NO_DOS    NUMBER(6),
      DT_DOS    DATE,
      TYPE_DOS  VARCHAR2(50) CHECK (TYPE_DOS IN ('SECRET','NORMAL'))
    --Insertions in table dossiers
    SQL> insert into dossier values(1,trunc(sysdate),'SECRET');
    1 row created.
    SQL> insert into dossier values(2,trunc(sysdate),'SECRET');
    1 row created.
    SQL> insert into dossier values(3,trunc(sysdate),'SECRET');
    1 row created.
    SQL> insert into dossier values(4,trunc(sysdate),'NORMAL');
    1 row created.
    SQL> insert into dossier values(5,trunc(sysdate),'NORMAL');
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> select * from dossier;
        NO_DOS DT_DOS    TYPE_DOS
             1 22-MAY-07 SECRET
             2 22-MAY-07 SECRET
             3 22-MAY-07 SECRET
             4 22-MAY-07 NORMAL
             5 22-MAY-07 NORMAL
    -- Logon with  user sys :
    -- Attribution  grants
    grant execute on dbms_rls to scott;
    grant execute on dbms_session to scott;
    grant ADMINISTER DATABASE TRIGGER  to scott;
    grant alter session to scott ;
    --Logon with user system : 
    --Création et attribution  rôles
    Create role sec_employe ;
    Create role sec_manager;
    Grant select, update,insert, delete on scott.dossier to sec_employe ;
    Grant select, update,insert, delete on scott.dossier to sec_manager;
    Grant sec_manager to scott;
    Grant create any context to scott;
    grant create table to scott;
    grant create procedure to scott;
    -Logon with  user  scott :
    -- Création context  package 
    SQL> create or replace package pkg_dossier_context
      2   is
      3     procedure set_manager;
      4     procedure set_employe;
      5    end;
    Package created.
    SQL> create or replace package body pkg_dossier_context
      2       as
      3   procedure set_manager
      4      is
      5    begin
      6       dbms_session.set_context('scott_dossier','app_role','manager');
      7    end;
      8           --
      9    procedure set_employe
    10       is
    11     begin
    12       dbms_session.set_context('scott_dossier','app_role','employe');
    13     end;
    14   end;
    Package body created.
    -- Création  context
    SQL> create or replace context scott_dossier using pkg_dossier_context;
    Context created.
    -- Création du  package de sécurité
    SQL> create or replace package pkg_dossier_sec
      2    as
      3       function dossier_predicate(schema_name in varchar2, object_name in varchar2)
      4         return varchar2;
      5   end;
    Package created.
    SQL> create or replace package body pkg_dossier_sec
      2     as
      3        function dossier_predicate(schema_name in varchar2,object_name in varchar2)
      4         return varchar2
      5         is
      6                 lv_predicate varchar2(1000):='';
      7         begin
      8                 if sys_context('scott_dossier','app_role') = 'manager' then
      9                         lv_predicate:='type_dos=''SECRET'''; -- a le droit de voir uniquement
                                              --     les dossiers de type SECRET
    10                elsif sys_context('scott_dossier','app_role') = 'employe' then
    11                        lv_predicate:='type_dos=''NORMAL'''; -- a le droit de voir uniquement
                                          --les dossiers de type NORMAL
    12                 else
    13                        lv_predicate:='1=2'; -- block access
    14                end if;
    15               return lv_predicate;
    16        end;
    17     end;
    Package body created.
    -- Add la policy (politique)
    SQL> begin
    2        dbms_rls.add_policy(
    3                  object_schema => 'SCOTT',
    4                  object_name => 'DOSSIER',
    5                  policy_name => 'SCOTT_DOSSIER_POLICY',
    6                  function_schema => 'SCOTT',
    7                  policy_function => 'pkg_dossier_sec.dossier_predicate',
    8                   statement_types => 'select, insert, update, delete',
    9                   update_check => TRUE,
    10                  enable => TRUE,
    11                  static_policy => FALSE);
    12   end;
    PL/SQL procedure successfully completed.
    -- Création du trigger on logon
    SQL>  create or replace trigger scott_logon_trigger
      2     after logon on database
      3    declare
      4     NB VARCHAR2(30) ;
      5   begin
      6       select granted_role
      7        into nb
      8        from dba_role_privs
      9        where grantee='SCOTT' and granted_role='SEC_MANAGER' ;
    10        pkg_dossier_context.set_manager;
    11      exception
    12         when no_data_found then
    13         pkg_dossier_context.set_employe;
    14   end;
    Trigger created.
    PL/SQL procedure successfully completed.
    SQL> SELECT * FROM DOSSIER;
        NO_DOS DT_DOS    TYPE_DOS
             1 22-MAY-07 SECRET
             2 22-MAY-07 SECRET
             3 22-MAY-07 SECRET
    Explication :
    Scott a le rôle sec_manager donc il a le droit de voir uniquement  les dossiers  de type SECRET,
    une clause de restriction  se rajoute à ma requête initiale,
    elle devient :SELECT * FROM DOSSIERS  WHERE  type_dos='SECRET' ;
    -- Connect with user system :  
    SQL> revoke sec_manager from scott;
    Revoke succeeded.
    SQL> grant sec_employe to scott;
    Grant succeeded.
    --Connect with  user  scott :
    SQL> connect scott/tiger@oratest;
    Connected.
    SQL> select * from dossier;
        NO_DOS DT_DOS    TYPE_DOS
             4 22-MAY-07 NORMAL
             5 22-MAY-07 NORMAL
    --Pour enlever le policy
    SQL>  begin
      2          dbms_rls.drop_policy(
      3           object_schema => 'SCOTT',
      4           object_name => 'DOSSIER',
      5           policy_name => 'SCOTT_DOSSIER_POLICY');
      6   end;
    PL/SQL procedure successfully completed.
    SQL> select * from dossier;
        NO_DOS DT_DOS    TYPE_DOS
             1 22-MAY-07 SECRET
             2 22-MAY-07 SECRET
             3 22-MAY-07 SECRET
             4 22-MAY-07 NORMAL
             5 22-MAY-07 NORMALEdited by: Salim Chelabi on 2008-12-16 10:54
    Edited by: Salim Chelabi on 2008-12-16 11:26

  • Trigger after logon

    Hi,
    I created a trigger to avoid users to run commands outside the Forms/Reports environment, which means they must execute their commands using the Application servers (App1 and App2, machine column, in v$session).
    I need to send them the message "YOU MUST RUN YOUR COMMANDS USING FORMS" when a user called TST01 is TRYING to connect to the database , running Forms outside App1 or App2 machines .
    Here is the code:
    CREATE OR REPLACE TRIGGER tr_lock_user_out_forms
    AFTER LOGON ON DATABASE
    DECLARE
    v_user sys.v_$session.username%TYPE;
    v_mac sys.v_$session.machine%TYPE;
    BEGIN
    SELECT username, machine
    INTO v_user, v_mac
    FROM sys.v_$session
    WHERE audsid = USERENV('SESSIONID')
    AND audsid != 0
    AND ROWNUM = 1;
    EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
    IF (UPPER(v_user) = 'TST01') THEN
    BEGIN
         IF LOWER(v_mac) NOT IN ('app1', 'app2')
         THEN
              RAISE_APPLICATION_ERROR(-20000, 'YOU MUST RUN YOUR COMMANDS USING FORMS');
         END IF;
    END;
    END IF;
    END;
    SHOW ERRORS
    It's allowing user TST01 to connect to the db. Do you guys have any idea ?
    Thanks in advance.

    Thanks for the replies,
    Naresh , the idea is to avoid users to connect to the DB without using Oracle Forms, and the message that the user would receive could be "PLEASE, CONNECT TO THE DATABASE USING FORMS ON AAP1 OR APP2" (sorry if the message I wrote before was unclear).
    So, the users could not even connect to the DB if they are not login using Forms. Your idea is good but we have 3.000 tables for this user to access, and as after update cannot be used in schema or database levels, I think it won't worth using this event.
    I'm trying other code but if any of you guys have another idea to correct the code below it'd be nice.
    Thkx in advance.

  • After Logon on Database Trigger Not Working From Client Terminal

    Hi Every One
    I Have a Problem, I'am Using Oracle 10g R2, I'd Written After Logon on Database Trigger, I'd Written The Trigger Under The Under The User With DBA Privileges, and it is work Fine, but it is work only when i Logon On The Database from The Server Terminal with any user, and If Logon From any Other Terminal It Is Not Work,
    Can any One Know The Reason, Please Help me
    Yasser Mokhtar

    Please post the trigger code.

  • Problem with Logon Trigger

    The logon trigger written by me is nt returing either program or module from the V$session table. Here is my trigger
    create or replace trigger PROGME
    after logon on database
    declare
    v_SCHEMANAME varchar2(30);
    t_program varchar2(64);
    begin
         v_SCHEMANAME := SYS_CONTEXT('USERENV','SESSION_USER');
    sys_context(''userenv'',''SESSIONID'')' into t_program;
    logon_proc;
         select MODULE
         into t_program
         from v$session where username = (select
    (sys_context('userenv','session_user')) from dual) and
    audsid= (select(sys_context('userenv','sessionid')) from dual);
         RAISE_APPLICATION_ERROR (-20000,SQLERRM || T_PROGRAM);
         IF v_SCHEMANAME = 'REPADMIN' AND upper(t_PROGRAM) like '%TO%' THEN
              RAISE_APPLICATION_ERROR (-20000,SQLERRM || T_PROGRAM);     
         END IF;
    exception
    when others then
         RAISE_APPLICATION_ERROR (-20000,SQLERRM || v_PROGRAM);
    end PROGME;
    Thanks in advance
    Raghu

    Even tried rewriting like this
    create or replace trigger PROGME
    after logon on database
    declare
    v_SCHEMANAME varchar2(30);
    v_USERNAME varchar2(30);
    v_PROGRAM varchar2(30);
    v_SESSION NUMBER;
    v_SERIALNO NUMBER;
    V_ssql varchar2(100);
    v_count number;
    t_program varchar2(64);
    begin
         select program
         into t_program
         from v$session where username = (select
    (sys_context('userenv','session_user')) from dual) and
    audsid= (select(sys_context('userenv','sessionid')) from dual);
         RAISE_APPLICATION_ERROR (-20000,SQLERRM || T_PROGRAM);
         IF v_SCHEMANAME = 'REPADMIN' AND upper(t_PROGRAM) like '%TOAD%' THEN
              RAISE_APPLICATION_ERROR (-20000,SQLERRM || T_PROGRAM);     
         END IF;
    exception
    when others then
         RAISE_APPLICATION_ERROR (-20000,SQLERRM || v_PROGRAM);
    end trg_no_TOAD_logon;

  • Logon trigger - restrict acces using Toad, SQLPLUS...

    Oracle 10.2.0.4
    I have users who use oracle form - ifweb90.exe.
    I want to restrict them to access database using SQL Developer, TOAD or any other tools. I create logon trigger:
    CREATE OR REPLACE TRIGGER block_users
    AFTER LOGON ON DATABASE
    begin
    FOR REC IN (SELECT USERNAME,PROGRAM
    FROM V$SESSION
    WHERE AUDSID = USERENV('SESSIONID'))
    LOOP
    if rec.username like ('X%')
    and
    rec.program not like ('ifweb90.exe')
    then
    RAISE_APPLICATION_ERROR(-20001,'ERROR MESSAGE');
    end if;
    end loop;
    END;
    This solution don’t work if the program executable is renamed (this can’t be done with SQL Developer).
    1. Is there any way to solve this?
    2. Whether this trigger will use resources, whether this trigger will check all connection? What is the cost to pay in terms of performance?
    Thanks in advance!
    Edited by: user9106065 on Nov 9, 2010 3:17 AM

    This solution don’t work if the program executable is renamed (this can’t be done with SQL Developer).
    1. Is there any way to solve this?Better alternative would be to change your own program, set the client_application_info and check for that using logon trigger. Anything else, can then be thrown off.
    2. Whether this trigger will use resources, whether this trigger will check all connection? What is the cost to pay in terms of performance?There would be negligible usage of resources.
    But this trigger won't stop any connections from any tool which come in as SYSDBA.

  • Restrict User Connections Using Logon Trigger

    Hi all,
    Now I am restricting user connections from selected terminals, using following logon trigger.
    It allows users with DBA privileged user.
    How to restrict DBA Privileged users users ?
    Note:- As per my application needs DBA privilege.
    CREATE OR REPLACE TRIGGER on_logon
    AFTER LOGON
    ON DATABASE
    DECLARE
    VPROGRAM VARCHAR2(30);
    Vusername VARCHAR2(30);
    VTERMINAL VARCHAR2(30);
    CURSOR user_prog IS
    SELECT UPPER(program),UPPER(username),NVL(TERMINAL,'X') FROM v$session
    WHERE audsid=sys_context('USERENV','SESSIONID');
    BEGIN
    OPEN user_prog;
    FETCH user_prog INTO Vprogram,Vusername,VTERMINAL;
    IF VTERMINAL NOT IN ( 'APP1','APP2','APP3')+
    and Vusername='ABUL'+
    THEN
    RAISE_APPLICATION_ERROR(-20001, 'You are not allowed to login');
    END IF;
    CLOSE user_prog;
    END;
    Thanks i Advance
    Abk

    Your application needs the DBA role? That is a terrible design-- it violates every principle of secure coding.
    Login triggers don't fire for users with the DBA role, so you won't be able to use a login trigger here. You could ditch the login trigger and configure invited and excluded nodes in the listener's sqlnet.ora file, i.e.
    tcp.validnode_checking = yes
    tcp.excluded_nodes = (hostname1,hostname2,hostname3)You'll have to restart the listener after making that change.
    Justin

  • Logon Trigger - Question

    Hi,
    I'm a beginner on the Oracle technology and I'm trying add a step on my logon trigger that avoids that the same user connects twice to the database using PL/SQL Developer.
    Here what I'm doing:
    VUSER := UPPER(SYS_CONTEXT('USERENV', 'SESSION_USER'))
    VPROGRAM := UPPER(SYS_CONTEXT('USERENV', 'MODULE'))
    SELECT COUNT(*) INTO N_SESSION
    FROM V$SESSION
    WHERE USERNAME = UPPER(SYS_CONTEXT('USERENV', 'SESSION_USER'));
    IF VUSER NOT IN ('SYS','SYSTEM') AND N_SESSION >= 2 AND VPROGRAM LIKE 'PLSQLDEV%' THEN
              RAISE_APPLICATION_ERROR(-20003,
                        'Access to database ' ||
                             UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) ||
                        ' denied for this application');
    END IF;
    For some reason, it's not working.
    Do you guys know what I should do?
    Thanks

    The trigger works fine in principle:
    CREATE OR REPLACE TRIGGER after_logon_trg
    AFTER LOGON
    ON DATABASE
    DECLARE
         n_session INTEGER;
    BEGIN
         SELECT COUNT ( * )
           INTO n_session
           FROM v$session
          WHERE username = UPPER (SYS_CONTEXT (
                                                       'USERENV',
                                                       'SESSION_USER'
         IF UPPER (SYS_CONTEXT (
                              'USERENV',
                              'SESSION_USER'
                         )) NOT IN ('SYS', 'SYSTEM')
      AND n_session >= 2
      AND UPPER (SYS_CONTEXT (
                              'USERENV',
                              'MODULE'
                         )) LIKE
                   'SQL%'
         THEN
              raise_application_error (
                   -20003,
                        'Access to database '
                   || UPPER (SYS_CONTEXT (
                                        'USERENV',
                                        'DB_NAME'
                   || ' denied for this application'
         END IF;
    END after_logon_trg;
    Session 1:
    SQL> connect scott/tiger@oracle
    Connect durchgeführt.
    Session 2:
    C:\>sqlplus scott/tiger@oracle
    SQL*Plus: Release 11.1.0.7.0 - Production on Fr Aug 28 19:05:25 2009
    Copyright (c) 1982, 2008, Oracle.  All rights reserved.
    ERROR:
    ORA-00604: Fehler auf rekursiver SQL-Ebene 1
    ORA-20003: Access to database ORACLE denied for this application
    ORA-06512: in Zeile 23But beware that for users with "ADMINISTER DATABASE TRIGGER" privilege the trigger will still allow the user to login !

  • Sql server 2012 Logon trigger not working for certain logins

    Hello. I created a login trigger to insert data for each login in a table, and it works for all logins except one that is format domain\login
    and the login ends with the dollar sign(actual name is domain\CTXDEVDCSI1$).
    I had been using varchar, but after reading other forum posts, I changed the varchar's to nvarchar's, but it still fails for that id.
    The errors written to the sql server error log were the usual "login failed due to trigger execution".
    I had granted insert on the rvvlogindata table in dsa to public, and only one id wasn't able to login after that.
    Any suggestions would be much appreciated!
    Here's the modified table ddl:
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[rvvlogindata](
    [sessionId] [int] NULL,
    [LoginTime] [datetime] NULL,
    [HostName] [nvarchar](50) NULL,
    [ProgramName] [nvarchar](300) NULL,
    [LoginName] [nvarchar](50) NULL,
    [ClientHost] [nvarchar](50) NULL
    ) ON [PRIMARY]
    GO
    Here's the logon trigger code:
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create trigger [LOGIN_IP_RESTRICTION] on all server for logon
    as
    Begin
    Declare @LogonTriggerData xml,
    @EventTime datetime,
    @LoginName nvarchar(50),
    @ClientHost nvarchar(50),
    @HostName nvarchar(50),
    @AppName nvarchar(300)
    Set @LogonTriggerData = eventdata()
    set @EventTime = @LogonTriggerData.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime')
    set @LoginName = @LogonTriggerData.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(50)')
    set @ClientHost = @LogonTriggerData.value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(50)')
    set @HostName = HOST_NAME()
    set @AppName = APP_NAME()
    insert into dsa.dbo.rvvlogindata
    sessionId,
    LoginTime,
    HostName,
    ProgramName,
    LoginName,
    ClientHost
    select @@spid,
    @EventTime,
    convert(nvarchar(50),@HostName),
    convert(nvarchar(300),@AppName),
    convert(nvarchar(50),@LoginName),
    convert(nvarchar(50),@ClientHost)
    END
    GO
    SET ANSI_NULLS OFF
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    ENABLE TRIGGER [LOGIN_IP_RESTRICTION] ON ALL SERVER
    GO

    Erland, I wanted to add more info to my reply earlier today.
    sp_who2 showed no blocking, activity monitor from my local PC SSMS showed no major waits or high i/o or cpu activity.
    I was wondering if you have any suggestions on how to find out what was the cause of the 5+ minute wait for SSMS on the remote desktop to respond and fully come up.
    I definitely can't put this in production with this hanging delay possibly occurring there.
    I was connecting as read_user when it hung.
    sp_who2 output at the time was:
    1     BACKGROUND                     sa   .   . NULL LOG WRITER       54631 0 04/10
    06:59:43                                              
     1     0   
    2     BACKGROUND                     sa   .   . NULL RECOVERY WRITER  8673 0 04/10 06:59:43                                              
     2     0   
    3     BACKGROUND                     sa   .   . NULL LAZY WRITER      300691 0 04/10
    06:59:43                                              
     3     0   
    4     BACKGROUND                     sa   .   . NULL RESOURCE MONITOR 1207010 0 04/10 06:59:43                                              
     4     0   
    5     BACKGROUND                     sa   .   . NULL XE TIMER         38828 0 04/10
    06:59:43                                              
     5     0   
    6     BACKGROUND                     sa   .   . NULL XE DISPATCHER    1404 0 04/10
    06:59:43                                              
     6     0   
    7     BACKGROUND                     sa   .   . master SIGNAL HANDLER   0 0 04/10 06:59:43                                              
     7     0   
    8     BACKGROUND                     sa   .   . NULL LOCK MONITOR     179978 0 04/10
    06:59:43                                              
     8     0   
    9     sleeping                       sa   .   . master TASK MANAGER     0 11 04/21
    08:37:04                                              
     9     0   
    10    sleeping                       sa   .   . master TASK MANAGER     0 0 04/10
    06:59:44                                              
     10    0   
    11    BACKGROUND                     sa   .   . master TRACE QUEUE TASK 546 0 04/10 06:59:44                                              
     11    0   
    12    BACKGROUND                     sa   .   . NULL SYSTEM_HEALTH_MO 4930 0 04/10 06:59:44                                              
     12    0   
    13    BACKGROUND                     sa   .   . NULL RECEIVE          422 0 04/10
    06:59:45                                              
     13    0   
    14    BACKGROUND                     sa   .   . master CHECKPOINT       79137 31811 04/10
    06:59:46                                              
     14    0   
    15    BACKGROUND                     sa   .   . master TASK MANAGER     1606 0 04/10
    06:59:46                                              
     15    0   
    16    BACKGROUND                     sa   .   . NULL UNKNOWN TOKEN    0 0 04/10 06:59:46                                              
     16    0   
    17    sleeping                       sa   .   . master TASK MANAGER     0 74 04/21
    08:37:04                                              
     17    0   
    18    sleeping                       sa   .   . master TASK MANAGER     0 0 04/21
    08:18:49                                              
     18    0   
    19    sleeping                       sa   .   . master TASK MANAGER     0 0 04/21
    08:30:29                                              
     19    0   
    20    sleeping                       sa   .   . master TASK MANAGER     0 1 04/21
    08:37:14                                              
     20    0   
    21    sleeping                       sa   .   . master TASK MANAGER     0 7 04/21
    08:30:59                                              
     21    0   
    22    sleeping                       sa   .   . master TASK MANAGER     16 4 04/21
    08:37:44                                              
     22    0   
    23    sleeping                       sa   .   . master TASK MANAGER     0 15 04/21
    08:39:24                                              
     23    0   
    25    BACKGROUND                     sa   .   . master BRKR EVENT HNDLR 0 95 04/10 06:59:48                                              
     25    0   
    30    BACKGROUND                     sa   .   . master BRKR TASK        0 0 04/10
    06:59:48                                              
     30    0   
    31    BACKGROUND                     sa   .   . master BRKR TASK        16926 0 04/10
    06:59:48                                              
     31    0   
    32    BACKGROUND                     sa   .   . master BRKR TASK        0 0 04/10
    06:59:48                                              
     32    0   
    34    BACKGROUND                     sa   .   . master BRKR TASK        10701 0 04/10
    06:59:48                                              
     34    0   
    51    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    03:16:56                                              
     51    0   
    52    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     52    0   
    53    sleeping                       NT AUTHORITY\SYSTEM SQLDEV2012      . msdb AWAITING COMMAND 0 0 04/10
    06:59:58 SQLAgent - Email Logger                        53    0   
    54    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:51 Citrix:Broker#1                                54    0   
    55    sleeping                       edit_user ASDEV1          . dsa AWAITING
    COMMAND 0 0 04/21 08:55:27 jTDS                                         
     55    0   
    56    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     56    0   
    57    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     57    0   
    58    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     58    0   
    59    sleeping                       NT AUTHORITY\SYSTEM SQLDEV2012      . msdb AWAITING COMMAND 124 242 04/10
    06:59:59 SQLAgent - Generic Refresher                   59    0   
    60    sleeping                       NT AUTHORITY\SYSTEM SQLDEV2012      . msdb AWAITING COMMAND 2790 1160 04/21
    08:55:00 SQLAgent - Job invocation engine               60    0   
    61    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     61    0   
    62    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     62    0   
    63    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     63    0   
    64    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     64    0   
    65    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     65    0   
    66    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    03:16:56                                              
     66    0   
    67    sleeping                       reports_adm REPORTSDEVSI2   . JBOSS_Cluster_CRServer2011 AWAITING COMMAND 0 0 04/21
    08:52:12 jTDS                                         
     67    0   
    68    sleeping                       edit_user DCMA10685       . dsa AWAITING COMMAND 0 0 04/21
    08:56:47 jTDS                                         
     68    0   
    69    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:49 Citrix:Configuration                           69    0   
    70    sleeping                       rvanveen DCMA8460        . master AWAITING COMMAND 1794 7120 04/21
    08:51:37 Microsoft SQL Server Management Studio         70    0   
    71    sleeping                       xsp_user XSPDEVSI2       . xspv5 AWAITING COMMAND 0 0 04/21
    08:58:52 .Net SqlClient Data Provider                   71    0   
    72    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:56:01 Citrix:Monitor                                 72    0   
    73    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:30 Citrix:Monitor                                 73    0   
    74    sleeping                       rvanveen DCMA8460        . master AWAITING COMMAND 16 2 04/21
    08:53:37 Microsoft SQL Server Management Studio - Query 74    0   
    75    sleeping                       rvanveen DCMA8460        . loginaudit AWAITING COMMAND 0 22 04/21
    08:50:29 Microsoft SQL Server Management Studio - Query 75    0   
    76    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:05:07                                              
     76    0   
    77    sleeping                       adm_jbossportal ASDEV1          . jbossportal AWAITING
    COMMAND 0 0 04/21 08:40:27 jTDS                                         
     77    0   
    78    sleeping                       rvanveen DCMA8460        . master AWAITING COMMAND 110 542 04/21
    08:46:17 Microsoft SQL Server Management Studio - Query 78    0   
    79    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:05:56                                              
     79    0   
    80    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:54 Citrix:MachineCreation                         80    0   
    81    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    08:08:29                                              
     81    0   
    82    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:02:13                                              
     82    0   
    83    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:02:15                                              
     83    0   
    84    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:44 Citrix:Monitor                                 84    0   
    85    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:11:05                                              
     85    0   
    86    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:53 Citrix:AdIdentity                              86    0   
    87    sleeping                       DAIWA_USA\admsql SQLDEV2012      . master AWAITING COMMAND 15 2 04/21
    08:56:20 Microsoft SQL Server Management Studio - Query 87    0   
    88    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:36 Citrix:SiteServices                            88    0   
    89    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:42 Citrix:Host                                    89    0   
    90    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:47 Citrix:ConfigurationLogging                    90    0   
    91    RUNNABLE                       rvanveen DCMA8460        . master SELECT INTO    
     15 51 04/21 08:58:46 Microsoft SQL Server Management Studio - Query 91    0   
    92    sleeping                       rvanveen DCMA8460        . master AWAITING COMMAND 63 30 04/21
    08:52:34 Microsoft SQL Server Management Studio - Query 92    0   
    94    sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:53 Citrix:DelegatedAdmin                          94    0   
    95    sleeping                       DAIWA_USA\admsql SQLDEV2012      . loginaudit AWAITING COMMAND 173 27 04/21
    08:56:10 Microsoft SQL Server Management Studio         95    0   
    96    sleeping                       xsp_user XSPDEVSI2       . xspv5 AWAITING COMMAND 0 0 04/21
    08:58:33 .Net SqlClient Data Provider                   96    0   
    97    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    08:10:07                                              
     97    0   
    98    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 31 38 04/21
    08:00:31                                              
     98    0   
    99    sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    08:10:12                                              
     99    0   
    100   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 282 04/21
    08:10:14                                              
     100   0   
    101   sleeping                       DAIWA_USA\admsql SQLDEV2012      . master AWAITING COMMAND 0 8 04/21
    08:56:50 Microsoft SQL Server Management Studio         101   0   
    102   sleeping                       DAIWA_USA\admsql SQLDEV2012      . master AWAITING COMMAND 31 0 04/21
    08:54:57 Microsoft SQL Server Management Studio         102   0   
    103   sleeping                       read_user SQLDEV2012      . master AWAITING COMMAND 0 8 04/21
    08:57:09 Microsoft SQL Server Management Studio         103   0   
    104   sleeping                       read_user SQLDEV2012      . dsa AWAITING COMMAND 0 0 04/21
    08:57:09 Microsoft SQL Server Management Studio         104   0   
    105   sleeping                       rvanveen DCMA8460        . tempdb AWAITING COMMAND 8875 336 04/21
    08:58:54 Microsoft SQL Server Management Studio         105   0   
    106   sleeping                       read_user SQLDEV2012      . master AWAITING COMMAND 16 0 04/21
    08:57:39 Microsoft SQL Server Management Studio         106   0   
    107   sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:47 Citrix:EnvTest                                 107   0   
    108   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 2200 8514 04/21
    08:00:31                                              
     108   0   
    109   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:05:56                                              
     109   0   
    110   sleeping                       rvanveen DCMA8460        . master AWAITING COMMAND 0 0 04/21
    08:58:48 Microsoft SQL Server Management Studio         110   0   
    113   sleeping                       Citrix_adm CTXDEVSI1       . XenApp6 AWAITING COMMAND 284 777 04/21
    08:51:33 Citrix IMA                                     113   0   
    119   sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:42 Citrix:ConfigurationLoggingData                119   0   
    120   sleeping                       AMERICAS\CTXDEVDCSI1$ CTXDEVDCSI1     . CitrixXDFarm1 AWAITING COMMAND 0 0 04/21
    08:58:26 Citrix:Storefront                              120   0   
    125   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/16
    13:55:16                                              
     125   0   
    126   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 16 0 04/16
    11:25:30                                              
     126   0   
    131   sleeping                       echouliak DCMA10685       . master AWAITING COMMAND 139 8 04/14
    15:26:55 Microsoft SQL Server Management Studio         131   0   
    135   sleeping                       echouliak DCMA10685       . dsa AWAITING COMMAND 0 0 04/14
    15:24:52 Microsoft SQL Server Management Studio - Query 135   0   
    136   sleeping                       echouliak DCMA10685       . dsa AWAITING COMMAND 0 0 04/14
    15:00:17 Microsoft SQL Server Management Studio - Query 136   0   
    140   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:05:56                                              
     140   0   
    145   sleeping                       edit_user INFADEVFS2      . dsa AWAITING COMMAND 0 0 04/21
    07:05:56                                              
     145   0   

  • Logon trigger setting nls_date_format over ridden by sql developer?

    Problem: Developers are inserting a Date record into a varchar field. I can't change this process right now. Non-Date info is stored here also. Would require a code change.
    To simplify this, I wanted to get all the developers to insert using the same 'nls_date_format'. I had hoped to be able to centralize this by having Oracle set it in the database. I tried this by setting the database nls_date_format and with a logon trigger.
    See test below. Seems to be over ridden.
    Test case is with SQL Developer. Noticed the same thing when developers use Websphere. I think we reduce the chance for errors, if I can handle this in the database. However, my nls_date_format settings are getting over ridden.
    1. s et database parameter nls_date_format to YYYY-MM-DD HH24:MI:SS , this gets over riden by SQL Developer/Websphere
    2. Created a trigger with an 'alter session', but this seems to get over ridden also.
    Please see test case below:
    Oracle 11.2.0.3
    test logging: SQLPLUS locally on the unix server, then log in using SQL Developer which is installed on my laptop.
    SQL Developer NLS_DATE_FORMAT : YYYY-MON-DD HH24:MI:SS , This is different for test purposes
    I have auditing turned turned on to db,extended with 'audit all by 'user' by access;' for test purposes to get more info.
    create table test (username varchar2(30),sid number,mytest varchar2(300),insert_date date);
    create or replace
    TRIGGER LOGINTRG
    AFTER LOGON ON DATABASE
    BEGIN
    insert into test select user,   sys_context('USERENV','SID') ,value,sysdate from v$parameter where name = 'nls_date_format';
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS''';
    insert into test select user,   sys_context('USERENV','SID') ,value,sysdate from v$parameter where name = 'nls_date_format';
    commit;
    END LOGINTRG;
    /Results/Questions
    1. When I select from 'test', I confirm that my NLS_DATE_FORMAT is the same both before and after the alter session.
    2. select value from v$parameter where name = 'nls_date_format'
    output: YYYY-MON-DD HH24:MI:SS (so sql developer is over riding this);
    3. select * from dba_audit_trail where username = 'MYUSER' order by timestamp desc;
    The SQLs from the logon trigger are not captured. how do I capture logon trigger sqls? Not a huge deal, just curious
    4. I do not see any alter sessions issued by my user. shouldn't audit all by access capture that? how could my session nls_date_format change without an alter session?
    Edited by: Guess2 on Apr 22, 2013 10:44 AM

    >
    Problem: Developers are inserting a Date record into a varchar field.
    >
    No - they aren't. That is physically impossible. The only thing that can be stored in a 'varchar field' is a string. Oracle considers ANYTHING stored in a character column to be a string.
    Date values are stored in DATE columns. Perhaps you meant that developers are converting DATE values to strings and then storing the string in a 'varchar field'?
    >
    I can't change this process right now. Non-Date info is stored here also.
    >
    WONDERFUL! Why use a column to stored just one type of data? That is extremely wasteful. Hopefully you store strings that represent numbers in that same column also? It makes the data model so much easier to understand if developers only need to learn one datatype.
    >
    Would require a code change.
    >
    The horror!
    You should never, ever, EVER use a code change to fix a problem if there is even the slightest possibility that you can change the ENTIRE DATABASE instead.
    I've got good news though. You are now on version Oracle 11.2.0.3 and Oracle, after months of protests by some of their largest clients, has finally dropped the exhorbitant license fees for using some of the more esoteric datatypes like DATE and NUMBER.
    You should suggest to your manager that they use some of the license fee money saved to hire developers that already know how to design proper data models and use those new-fangled datatypes.
    Trust me - once you've made it up that steep learning curve your code will have fewer of those pesky 'dirty data' issues to deal with.
    Sure - it means less job security for your current developers. But sometimes you just have to 'take one for the team'!

  • AUTHENICATE SSO RAD INFO IN LOGON TRIGGER IN 10G FORM?

    I've been trying to add a LOGON Trigger to my Oracle 10g Form to check my RADs after logging into SSO.
    I'm having a problem setting up multiple Config's for multiple RADs. I have about 7different applications that I would like to log into but would like to log into the SSO just once. But for some reason each application is asking for a SSO log in.

    Hi!
    This is a webutil-restriction.
    You cannot use webutil in triggers that fires before the form has complete focus.
    Like pre-form, when-new-form-instance and on-logon triggers.
    In a when-new-form-instance trigger create a timer, let's say 200 millisconds long.
    In a when-timer-expired trigger you can call webutil.
    May you put your configuration-file on the server and use d2kwut !
    Regards.

Maybe you are looking for