Itu tergantung, jika Anda ingin membatasi direktori OS mana yang dapat diakses Oracle dari perintah utl_file, Anda dapat mengatur utl_file_dir
parameter. Sayangnya, parameter ini berlaku untuk seluruh sistem, jadi Anda tidak akan dapat memberikan/mencabut pengguna tertentu menggunakan parameter ini. Perlu diingat juga bahwa jika Anda membuat perubahan pada parameter ini, perubahan tersebut tidak akan berlaku sampai database Oracle dimulai ulang:
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Lihat 12.1 Oracle Documents
untuk informasi lebih lanjut mengenai utl_file_dir
.
Yang mengatakan, jika Anda benar-benar ingin membatasi siapa yang dapat membuat Direktori Oracle ke direktori OS tertentu, prosedur akan sesuai untuk tugas itu karena itu akan memungkinkan Anda untuk memiliki kontrol berbutir lebih halus (dan membatasi siapa yang memiliki create any directory
hak istimewa kepada pemilik prosedur):
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.