Det afhænger af, om du vil begrænse, hvilke OS-mapper Oracle kan få adgang til fra utl_file-kommandoer, kan du indstille utl_file_dir
parameter. Desværre er denne parameter systemdækkende, så du vil ikke være i stand til at tildele/tilbagekalde for en bestemt bruger ved at bruge denne parameter. Husk også, at hvis du foretager ændringer i denne parameter, træder disse ændringer ikke i kraft, før Oracle-databasen genstartes:
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Se 12.1 Oracle Docs
for mere information om utl_file_dir
.
Når det er sagt, hvis du virkelig ønsker at begrænse, hvem der kan oprette Oracle-kataloger til specifikke OS-mapper, ville en procedure være passende til den opgave, da det ville tillade dig at have en mere finkornet kontrol (og begrænse, hvem der har den meget kraftfulde create any directory
privilegium til ejeren af proceduren):
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.