Dat hangt ervan af, als u wilt beperken tot welke OS-directory's Oracle toegang heeft via utl_file-opdrachten, kunt u de utl_file_dir
instellen parameter. Helaas is deze parameter systeembreed, dus u kunt deze parameter niet toekennen/intrekken voor een specifieke gebruiker. Houd er ook rekening mee dat als u wijzigingen aanbrengt in deze parameter, deze wijzigingen pas van kracht worden als de Oracle-database opnieuw is opgestart:
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Raadpleeg de 12.1 Oracle Docs
voor meer informatie over utl_file_dir
.
Dat gezegd hebbende, als u echt wilt beperken wie Oracle-directories kan maken tot specifieke OS-directory's, zou een procedure geschikt zijn voor die taak, omdat u hierdoor een fijnmazigere controle kunt hebben (en kunt beperken wie de zeer krachtige create any directory
privilege aan de eigenaar van de procedure):
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.