triggers are owned by the defining schema, unless you say otherwise.
Meaning, I can create a trigger on YOUR table.
Meaning, you can drop my trigger.
ops$tkyte%ORA10GR2> create user a identified by a quota unlimited on users default tablespace users;
User created.
ops$tkyte%ORA10GR2> grant create session, create table to a;
Grant succeeded.
ops$tkyte%ORA10GR2> create user b identified by b;
User created.
ops$tkyte%ORA10GR2> grant create session, create ANY trigger to b;
Grant succeeded.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> connect a/a
Connected.
a%ORA10GR2> create table t ( x int );
Table created.
a%ORA10GR2>
a%ORA10GR2> connect b/b
Connected.
b%ORA10GR2> create or replace trigger t before insert on a.t
2 begin
3 dbms_output.put_line( 'i fired' );
4 end;
5 /
Trigger created.
b%ORA10GR2> select * from user_triggers;
TRIGGER_NAME TRIGGER_TYPE
------------------------------ ----------------
TRIGGERING_EVENT
-------------------------------------------------------------------------------
TABLE_OWNER BASE_OBJECT_TYPE TABLE_NAME
------------------------------ ---------------- ------------------------------
COLUMN_NAME
-------------------------------------------------------------------------------
REFERENCING_NAMES
-------------------------------------------------------------------------------
WHEN_CLAUSE
-------------------------------------------------------------------------------
STATUS
--------
DESCRIPTION
-------------------------------------------------------------------------------
ACTION_TYPE
-----------
TRIGGER_BODY
-------------------------------------------------------------------------------
T BEFORE STATEMENT
INSERT
A TABLE T
REFERENCING NEW AS NEW OLD AS OLD
ENABLED
t before insert on a.t
PL/SQL
begin
dbms_output.put_line( 'i fired' );
end;
b%ORA10GR2> insert into a.t values (0);
insert into a.t values (0)
*
ERROR at line 1:
ORA-00942: table or view does not exist
<b>so, even though I cannot select or do anything to your table, I can create a trigger on it..</b>
b%ORA10GR2> connect a/a
Connected.
a%ORA10GR2> insert into a.t values (0);
i fired
1 row created.
a%ORA10GR2> drop table t purge;
Table dropped.
a%ORA10GR2> connect b/b
Connected.
b%ORA10GR2> select * from user_triggers;
no rows selected
and you can drop my trigger by dropping your table...