2017-01-26 4 views
0

Ich versuche, den folgenden Befehl auszuführen:Laufsystem Befehl von Oracle gespeicherten Prozedur

select os_command.exec('/bin/mkdir /home/smucha/testdir_ora3') from dual; 
/

Das funktioniert gut, wenn ich angemeldet bin in als SYS.

Wenn ich versuche, ist als ein Benutzer ausführen SEBA bekomme ich folgende Fehlermeldung:

ORA-29532: java.security.AccessControlException: the Permission (java.io.FilePermission /bin/mkdir execute) has not been granted to SEBA. The PL/SQL to grant this is dbms_java.grant_permission('SEBA', 'SYS:java.io.FilePermission', '/bin/mkdir', 'execute') 
ORA-06512: at "SEBA.OS_COMMAND", line 68 
29532. 00000 - "Java call terminated by uncaught Java exception: %s" 
*Cause: A Java exception or error was signaled and could not be 
      resolved by the Java code. 
*Action: Modify Java code, if this behavior is not intended. 

Ich habe versucht, die erforderliche Berechtigung mit SYS Konto zu gewähren.

Nach der Ausführung des folgenden Code:

call dbms_java.grant_permission('SEBA', 
        'SYS:java.io.FilePermission', '/bin/mkdir', 'execute'); 

ich:

dbms_java.grant_permission 'SEBA', succeeded. 

Allerdings, wenn ich versuchen, den Befehl auszuführen:

select os_command.exec('/bin/mkdir /home/smucha/testdir_ora3') from dual; 
/

Ich bekomme den gleichen Fehler wie Vor.

Können Sie mir bitte mitteilen, was ich tun muss, um os-Befehle auszuführen?

Alles funktioniert, wenn ich als SYS verbunden bin, so ist es wie Benutzer SEBA einige Berechtigungsprobleme hat aussieht.

Ich weiß nur nicht, welche Berechtigungen zu gewähren?

Antwort

0

Ich möchte nur meine Erfahrung teilen, gespeicherte Prozeduren akzeptieren nicht die ddl Privilegien über die Rolle zur Verfügung gestellt. So die Berechtigung, die Sie versuchen, Benutzer Seba zu geben ist über Rolle, dann ist es nicht gültig.Beispiel wenn Sie haben Rolle mit privilegiert create table und wenn Sie diese Rolle zu seba zuweisen, kann seba die Tabelle nicht über gespeicherte Prozedur erstellen.So müssen wir gewähren, erstellen Sie eine Tabelle zu seba direkt oder Sie müssen während der Erstellung authid aktuellen Benutzer verwenden Stored Procedure.So überprüfen Sie bitte, ob Sie in diesem Fall direkte Privilegien an seba oder per Rolle erteilen.

check seba hat irgendwelche Verzeichnisprivilegien, wenn nicht, dann bieten Sie Grant an, erstellen Sie irgendein Verzeichnis zu seba und stellen Sie sicher, dass seba privilge von select * von dba_directories erhält;

Verwandte Themen