Detta bör fungera, med eller utan specialtecken; detta är i 11.2.0.3, först utan:
CREATE USER "AUSER" IDENTIFIED BY "a";
CREATE USER bar IDENTIFIED BY "random-trash";
ALTER USER bar GRANT CONNECT THROUGH "AUSER";
GRANT CREATE SESSION TO "AUSER";
GRANT CREATE SESSION TO "BAR";
CREATE PUBLIC DATABASE LINK dbl CONNECT TO "AUSER[BAR]" IDENTIFIED BY "a" using 'MYDB';
SELECT * FROM [email protected];
D
-
X
Och med:
CREATE USER "A-USER" IDENTIFIED BY "a";
CREATE USER foo IDENTIFIED BY "random-trash";
ALTER USER foo GRANT CONNECT THROUGH "A-USER";
GRANT CREATE SESSION TO "A-USER";
GRANT CREATE SESSION TO "FOO";
DROP PUBLIC DATABASE LINK dbl;
CREATE PUBLIC DATABASE LINK dbl CONNECT TO "A-USER[FOO]" IDENTIFIED BY "a" using 'MYDB';
SELECT * FROM [email protected];
D
-
X
Ingen av dem fungerar på 11.2.0.4; med eller utan specialtecknet det fel:
select * from [email protected]
*
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from DBL
Om du är på 11.2.0.4 eller högre kan det hända att du stöter på bugg 19191702, som verkar ha brutit proxykapaciteten genom en databaslänk. Se MOS-anteckning 19191702.8 för mer information. Detta verkar dock vara avsiktligt nytt beteende snarare än en bugg, och det gamla beteendet - där detta fungerade - beskrivs som felaktigt.
Det kan finnas en patch tillgänglig för att tillåta att en specifik händelse ställs in som återställer beteendet (och det är förmodligen tillgängligt i 12.2), men som "en tillfällig lösning för att tillåta befintliga applikationer, beroende på det [gamla] felaktiga beteendet, att fortsätta att arbete". Om det inte finns en patch för din plattform och version eller om evenemanget inte hjälper måste du göra en serviceförfrågan; det kan vara värt att uppfostra en ändå såklart.