当前位置: 代码迷 >> Oracle开发 >> oracle触发器里怎么显式的赋权限
  详细解决方案

oracle触发器里怎么显式的赋权限

热度:57   发布时间:2016-04-24 07:23:46.0
oracle触发器里如何显式的赋权限
SQL code
create or replace trigger login_on_infoafter logon on database Begin    insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)    select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program    from sys.v_$session where AUDSID = USERENV('SESSIONID');    END;

此触发器记录用户的登录信息,编译的时候报错
Compilation errors for TRIGGER WATCHER.LOGIN_ON_INFO

Error: PL/SQL: ORA-00942: 表或视图不存在
Line: 6
Text: from sys.v_$session where AUDSID = USERENV('SESSIONID');

Error: PL/SQL: SQL Statement ignored
Line: 4
Text: insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)
网上查了一下,说是权限的问题需要给赋权限
grant select on sys.v_$session to username;
但是我不太清楚具体这句话应该如何放在语句里,请知道的前辈不吝赐教,拜谢O(∩_∩)O~

------解决方案--------------------
SQL code
--你直接sys用户登入然后执行那个语句就可以了。--假设你建立触发器的用户是testgrant select any dictionary to test;grant select on v_$session to test;--我在test用户下测试了一下,没有报错。[TEST@myorcl] SQL>CREATE TABLE LOGIN_LOG(  2     SESSION_ID VARCHAR2(20),  3     LOGIN_ON_TIME DATE,  4     LOGIN_OFF_TIME DATE,  5     USER_IN_DB VARCHAR2(20),  6     MACHINE VARCHAR2(20),  7     IP_ADDRESS VARCHAR2(20),  8     RUN_PROGRAM VARCHAR2(20)  9  );表已创建。[TEST@myorcl] SQL>CREATE OR REPLACE TRIGGER LOGIN_ON_INFO  2    AFTER LOGON ON DATABASE  3  BEGIN  4    INSERT INTO LOGIN_LOG  5      (SESSION_ID,  6       LOGIN_ON_TIME,  7       LOGIN_OFF_TIME,  8       USER_IN_DB,  9       MACHINE, 10       IP_ADDRESS, 11       RUN_PROGRAM) 12      SELECT AUDSID, 13             SYSDATE, 14             NULL, 15             SYS.LOGIN_USER, 16             MACHINE, 17             SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 18             PROGRAM 19        FROM SYS.V_$SESSION 20       WHERE AUDSID = USERENV('SESSIONID'); 21  END; 22  /触发器已创建[TEST@myorcl] SQL>
------解决方案--------------------
探讨
2楼的兄弟 这句话应该放在整个SQL语句的什么位置啊 我刚才是这么放的,如下:
  相关解决方案