Cela dépend, si vous souhaitez restreindre les répertoires du système d'exploitation auxquels Oracle peut accéder à partir des commandes utl_file, vous pouvez définir le utl_file_dir
paramètre. Malheureusement, ce paramètre s'applique à l'ensemble du système, vous ne pourrez donc pas accorder/révoquer un utilisateur spécifique à l'aide de ce paramètre. Gardez également à l'esprit que si vous apportez des modifications à ce paramètre, ces modifications n'entreront en vigueur qu'au redémarrage de la base de données Oracle :
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Consultez la 12.1 Oracle Docs
pour plus d'informations concernant utl_file_dir
.
Cela dit, si vous voulez vraiment restreindre qui peut créer des répertoires Oracle à des répertoires de système d'exploitation spécifiques, une procédure serait appropriée pour cette tâche car cela vous permettrait d'avoir un contrôle plus fin (et de limiter qui a le très puissant create any directory
privilège au propriétaire de la procédure) :
sqlplus kjohnston
create or replace procedure mydircreate (p_dir varchar2)
as
ex_custom EXCEPTION;
PRAGMA EXCEPTION_INIT( ex_custom, -20001 );
begin
if lower(p_dir) not like '/foo/bar/%' then
raise_application_error( -20001, 'Not authorized' );
end if;
execute immediate 'create or replace directory mydir as ''' || p_dir || '''';
end mydircreate;
create user testuser identified by <password>;
grant create session to testuser;
grant execute on kjohnston.mydircreate to testuser;
exit;
sqlplus testuser
SQL> exec kjohnston.mydircreate('mydir', '/randomdir');
ORA-20001: Not authorized
SQL> exec kjohnston.mydircreate('mydir', '/foo/bar/baz');
PL/SQL procedure successfully completed.