Eso depende, si desea restringir a qué directorios del sistema operativo puede acceder Oracle desde los comandos utl_file, puede establecer el utl_file_dir
parámetro. Desafortunadamente, este parámetro es para todo el sistema, por lo que no podrá otorgar/revocar para un usuario específico usando este parámetro. También tenga en cuenta que si realiza cambios en este parámetro, esos cambios no entrarán en vigencia hasta que se reinicie la base de datos de Oracle:
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Consulte la 12.1 Oracle Docs
para obtener más información sobre utl_file_dir
.
Dicho esto, si realmente desea restringir quién puede crear directorios de Oracle a directorios de sistemas operativos específicos, un procedimiento sería apropiado para esa tarea, ya que le permitiría tener un control más detallado (y limitar quién tiene el poderoso create any directory
privilegio al propietario del procedimiento):
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.