To zależy, jeśli chcesz ograniczyć katalogi systemu operacyjnego, do których Oracle ma dostęp za pomocą poleceń utl_file, możesz ustawić utl_file_dir
parametr. Niestety, ten parametr dotyczy całego systemu, więc nie będziesz mógł przyznać/odwołać dla konkretnego użytkownika za pomocą tego parametru. Pamiętaj również, że jeśli wprowadzisz zmiany w tym parametrze, zmiany te nie wejdą w życie, dopóki baza danych Oracle nie zostanie zrestartowana:
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Zapoznaj się z 12.1 Dokumenty Oracle
aby uzyskać więcej informacji na temat utl_file_dir
.
To powiedziawszy, jeśli naprawdę chcesz ograniczyć, kto może tworzyć katalogi Oracle do określonych katalogów systemu operacyjnego, odpowiednia byłaby procedura dla tego zadania, ponieważ pozwoliłoby to na dokładniejszą kontrolę (i ograniczenie, kto ma bardzo potężny create any directory
przywilej właściciela procedury):
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.