Today I could not understand why I was getting ORA-1031 with create database link.
After analysis, I found out a logon trigger that changed the current schema. As Tom always says, triggers are evil…
DEMO:
SQL> create user u1 identified by xxx;
User created.
SQL> grant create session, create database link to u2 identified by xxx;
Grant succeeded.
SQL> create trigger evil after logon on database begin
2 execute immediate 'alter session set current_schema=u1';end;
3 /
Trigger created.
SQL>
SQL> conn u2/xxx
Connected.
SQL> create database link l;
create database link l
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> show user
USER is "U2"
SQL> select sys_context('USERENV','CURRENT_SCHEMA') from dual;
SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
-----------------------------------------
U1
SQL> alter session set current_schema=u2;
Session altered.
SQL> create database link l;
Database link created.