2017-01-02 1 views
1

Also habe ich eine Funktion namens doLogin, die zwei Argumente empfängt, und ich habe einen Benutzer namens user_login erstellt. I gewährt user_login folgenden Privilegien:Wie man eine Funktion vom System aus ausführt?

GRANT CREATE SESSION TO user_login; 
GRANT EXECUTE ON DoLogin TO user_login; 
GRANT SELECT ON Utilizadores TO user_login; --do Login gets information from this table 

Aber wenn eine Verbindung user_login mit und versuchen, die Funktion auszuführen, erhalte ich folgende Fehlermeldung:

Erro: java.sql.SQLException: ORA-06550: line 1, column 13: PLS-00201: identifier 'DOLOGIN' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored

Edit: Ich würde das einzige System, wie und user_login Zugriff auf diese Funktion

+0

Vielleicht müssen Sie Rufen Sie es mit SCHEMA.DoLogin auf, oder definieren Sie ein öffentliches Synonym? – Aleksej

+0

Und wie würde ich das tun? – Safirah

+0

@Aleksej Ich habe es versucht: 'ALTER SESSION SET CURRENT_SCHEMA = user_login' – Safirah

Antwort

2

Angenommen, Sie haben Ihre Funktion DoLogin in Ihrem Schema definiert (z. B.) und Sie müssen es in einem anderen Benutzer verwenden, z. B. user_login.

Sie entscheiden, können Sie die Funktion mit

yourSchema.DoLogin 

anrufen oder ein öffentliches Synonym von innen yourSchema erstellen und dann die Funktion aufrufen, ohne den Schemanamen hinzufügen:

create public synonym DoLogin for DoLogin 
+0

Vielen Dank für Ihre Antwort! Das löste zwar mein Problem, aber könnte besser erklären was Synonyme sind, habe ich diese Frage gesehen: http://stackoverflow.com/questions/2364818/when-should-database-ynynyms-be- used aber ich bin nicht wirklich Verständnis – Safirah

+0

Und das Synonym erstellt wird übrigens für alle Benutzer zugänglich (wenn ja, das ist nicht das, was ich wollte) – Safirah

+1

Wenn Sie ein öffentliches Synonym erstellen, wird es für jeden Benutzer sichtbar sein, ma nur Benutzer mit der Berechtigung EXECUTE können um die Funktion auszuführen. Mit anderen Worten, Sie können ein öffentliches Synonym als eine Möglichkeit betrachten, das Schreiben von SCHEMA.object zu vermeiden, aber sie geben kein grant – Aleksej

Verwandte Themen