2011-08-22 3 views
2

J'ai créé une source Java PL/SQL et des privilèges ont été accordés.Commandes Unix via Oracle

La procédure PL/SQL est en cours d'exécution et aucune erreur ne se produit. Dans le JavaSource il y a la commande unix suivante:

ls -al> /orion/list/list.txt

le fichier List.txt ne sont pas créés dans le répertoire.

Comment connaître le problème si aucune erreur ne survient? Cela pourrait-il être un problème de droits donnés à Oracle par Unix.

Oracle est le soleil unix solaris

+0

est-ce que vous avez vu ça demander le fil de Tom? http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3069633370832 –

+0

Il peut y avoir un fichier de trace sur le serveur Oracle qui aura plus d'informations. –

Répondre

2

Je suis d'accord avec Stephen ODonnell.

J'ai implémenté exactement la même fonctionnalité Java (créant un fichier contenant une liste de répertoires) récemment.

je devais donner les éléments suivants:

-- this grants read privilege on STDIN 
EXEC dbms_java.grant_permission(
    grantee => '<username>', 
    permission_type => 'SYS:java.lang.RuntimePermission', 
    permission_name => 'readFileDescriptor', 
    permission_action => null 
); 

-- this grants write permission on STDOUT 
EXEC dbms_java.grant_permission(
    grantee => '<username>', 
    permission_type => 'SYS:java.lang.RuntimePermission', 
    permission_name => 'writeFileDescriptor', 
    permission_action => null 
); 

-- this grants execute privilege for the 'ls' command 
EXEC dbms_java.grant_permission(
    grantee => '<username>', 
    permission_type => 'SYS:java.io.FilePermission', 
    permission_name => '/bin/ls', 
    permission_action => 'execute' 
); 

-- this grants read, write, delete and execute on all 
-- of the referenced directories (subdirectories of <directory>) 
EXEC dbms_java.grant_permission(
    grantee => '<username>', 
    permission_type => 'SYS:java.io.FilePermission', 
    permission_name => '<directory>/-', 
    permission_action => 'read,write,delete,execute' 
); 

-- this grants execute on sh 
EXEC dbms_java.grant_permission(
    grantee => '<username>', 
    permission_type => 'SYS:java.io.FilePermission', 
    permission_name => '/bin/sh', 
    permission_action => 'read,execute' 
); 

Hope this helps. Ollie.

+0

Oui, ce code semble familier - probablement préférable de l'exécuter à la place ou en s'appuyant sur le rôle que j'ai suggéré, juste au cas où le rôle ne donne pas tout le nécessaire. –

+1

J'ai défini les autorisations suivantes et le problème persiste toujours. Cela peut-il être dû au fait que l'utilisateur Oracle n'est pas le même que l'utilisateur Unix? begin DBMS_JAVA.grant_permission ('ORION', 'java.io.FilePermission', 'TestHostCommand', 'lire, écrire, exécuter, supprimer'); fin; commencer DBMS_JAVA.grant_permission ('ORION', 'SYS: java.lang.RuntimePermission', 'writeFileDescriptor', ''); fin; commencer DBMS_JAVA.grant_permission ('ORION', 'SYS: java.lang.RuntimePermission', 'readFileDescriptor', ''); fin; – CRL88

+0

"Cela peut-il être dû au fait que l'utilisateur Oracle n'est pas le même que l'utilisateur Unix". Non, l'utilisateur de la base de données est séparé de la base de données qui accède aux commandes du système d'exploitation. Oracle a-t-il des autorisations d'accès sur les répertoires du système d'exploitation? – Ollie

3

D'un lointain souvenir, je suis assez certain que vous devez accorder certains privilèges à l'utilisateur d'exécuter Java avant qu'il ne soit autorisé à exécuter des commandes unix.

Jetez un oeil à http://download.oracle.com/docs/cd/B28359_01/java.111/b31225/chten.htm

Je pense que vous devez lui donner la permission java.io.FilePermission. Une façon de faire est d'accorder le rôle JAVASYSPRIV à votre utilisateur. Je n'ai nulle part où le tester pour le moment, mais si ce n'est pas correct, le lien ci-dessus devrait vous diriger dans la bonne direction.

+0

La permission a été accordée par un administrateur de base de données Le problème est qu'il n'y a pas d'erreurs enregistrées sur mon Sql Navigator mais le fichier list.txt n'est pas créé dans le répertoire – CRL88

+0

Demandez à votre administrateur de base de données de regarder dans les journaux d'alerte Oracle signale tout problème. – Ollie