Bonjour,
J'aimerai savoir comment je peux savoir si un user oracle peut lire dans un fichier unix.
Je vous remercie d'avance![]()
Bonjour,
J'aimerai savoir comment je peux savoir si un user oracle peut lire dans un fichier unix.
Je vous remercie d'avance![]()
bonsoir,
tu ne te serais pas trompé de forum par hasard?
tu regardes les droits sur le fichier d'abord (si tu as accès c'est déjà bon signe)
puis à quel(s) groupe(s) appartient le user (/etc/groups par exemple)
Si tu veux lire un fichier qui se trouve dans le serveur de la base de données avec un utilisateur oracle, tu renseigne le paramètre utl_file_dir.
Je n'ai pas l'impression que le demandeur initial suive la question, mais à toutes fins utiles...
Un utilisateur connecté à la base Oracle peut accéder à des répertoires du système d'exploitation (on ne peut pas descendre au niveau du fichier) par deux moyens :
- la paramètre d'instance UTL_FILE_DIR (comme mentionné par Islamov2000), mais dont l'usage est déconseillé, car on ne peut pas choisir qui accèdera au répertoire désigné
- le mécanisme des objets logiques DIRECTORY.
Concernant les objets DIRECTORY, le droit d'accès à un répertoire peut être donné à un utilisateur soit directement, soit par l'entremise d'un rôle.
Cela fait donc 3 situations à identifier.
Je recherche ici les répertoires de l'OS auxquels SCOTT à accès (sans préciser si c'est un accès READ ou WRITE, mais on pourrait l'ajouter).
Résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 set linesize 160 col repertoire format a20 col chemin format a50 col utilisateur format a20 col chaine format a50 SELECT repertoire, chemin, utilisateur, chaine FROM (SELECT connect_by_root nom_rep AS repertoire, connect_by_root chemin AS chemin, grantee AS utilisateur, ltrim(sys_connect_by_path(grantee, ' -> '), ' -> ') AS chaine FROM (SELECT DISTINCT grantee, table_name AS nom_rep, dd.directory_path AS chemin, 'REP' AS nature FROM dba_tab_privs tp join dba_directories dd ON tp.owner = dd.owner AND tp.table_name = dd.directory_name WHERE tp.privilege IN ( 'READ', 'WRITE' ) UNION SELECT grantee, granted_role, 'BIDON' AS chemin, 'ROLE' AS nature FROM dba_role_privs) START WITH nature = 'REP' CONNECT BY PRIOR grantee = nom_rep UNION SELECT 'param UTL_FILE_DIR' AS repertoire, sp.value AS chemin, u.username AS utilisateur, 'param UTL_FILE_DIR' AS chaine FROM dba_users U cross join v$system_parameter2 SP WHERE SP.name = 'utl_file_dir') WHERE utilisateur = 'SCOTT';
Comme on le voit, DIRTEST est accédé à travers une cascade de rôles, SUBDIR est accédé en direct, est c:\temp est accessible via le paramètre UTL_FILE_DIR.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 REPERTOIRE CHEMIN UTILISATEUR CHAINE -------------------- -------------------------------------------------- -------------------- ------------------------------ DIRTEST f:\oracle\demo SCOTT R1 -> R2 -> R3 -> SCOTT SUBDIR F:\oracle\ora102\demo\schema\order_entry\/2002/Sep SCOTT SCOTT param UTL_FILE_DIR c:\temp SCOTT param UTL_FILE_DIR
Partager