Jeg har lavet en External Stored Procedure, som jeg kalder via ExtProc. Dette virker helt fint. Min External Stored Procedure kalder herefter tilbage til databasen, for at udføre noget arbejde i nogle tabeller. Detter virker også helt fint, så længe jeg leverer et brugernavn og password den kan connecte med.
Mit problem er så, at jeg gerne vil benytte OS Authentication til at connecte tilbage med, så jeg ikke behøver hardcode et brugernavn/password enten i DLL'en eller databasen som kalder den. Listener-servicen kører som udgangspunkt som LocalSystem. Jeg har forsøgt at oprette en "OPS$LOCALSYSTEM" bruger, men det virker ikke. Jeg har så prøvet at lade listeneren kører som en bruger der også er oprettet på databasen, men når jeg så kalder min Stored Procedure får jeg følgende fejl:
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Ifølge beskrivelsen i "Oracle9i Application Developer's Guide - Fundamentals" er det ikke nødvendigt at angive brugernavn og password hvis du vil lave callback (altså logge ind som samme bruger). Du kalder OCIExtProcGetEnv og så har du et OCI handle til din kontekst, inklusive det schema du "kommer fra".
Der ligger et eksempel i $ORACLE_HOME/plsql/demo med navnet extproc.c (og extproc.sql) hvor der laves callback til databasen, uden angivelse af brugernavn.
En anden situation er naturligvis hvis du vil logge ind som en anden bruger; men jeg ved ikke om det er tilfældet for dig.
Tak for en rigtig god kommentar. Jeg kendte ikke til den funktionalitet.
Desværre er der et par problemer med det. For det første har jeg brug for, at jeg kan lave DDL statements når jeg laver callback. Det kan man ikke vha. den kontekst man sender med fra PL/SQL. For det andet har jeg brug for, at jeg kan benytte en anden bruger end den der kalder PL/SQL funktionen. Grunden til dette er, at min funktion ligger i et andet skema end den aktive bruger, og det er i dette skema jeg har brug for at foretage DDL statements.
Så jeg står stadig med den eneste løsning lige nu, at jeg bliver nødt til at sende brugernavn og password med som parametre i min External Stored Procedure, hvis ikke jeg kan få listeneren til at køre som en anden bruger, uden at få ovennævnte fejl.
Hmmmm Så vidt jeg kan se, så er det ikke listener'en der skal have et andet brugernavn, men oracle kernen. Jeg ville forsøge at lade OracleService<DB Navn> køre i en navngiven bruger, der har de korrekte rettigheder
Undskyld jeg ikke lige har fået svaret med det samme, men der har været lidt stress den sidste uge.
Jeg har forsøgt at lade OracleServicen køre som en anden bruger også, men det går også lidt galt. Jeg får følgende fejl når jeg ændrer servicen til at køre som en anden bruger:
ORA-12500:tns:Listenerens start af en dedikeret serverproces fejlede
Jeg kan godt bruger applikationer der tilgår databasen (så som sqlplus), men jeg får ovenstående fejl når jeg forsøger at connecte fra min External SP, og når jeg forsøger at logge på som SYS i Enterprice Manageren.
Jeg tænkte så, at det måske var fordi både listeneren og servicen skulle køre som samme bruger, så det forsøgte jeg så også. Så kunne jeg igen bruge min Enterprice Manager, men fik så den gammelkendte fejl fra min External SP (ORA-28546).
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.