Det beror på, om du vill begränsa vilka OS-kataloger Oracle kan komma åt från utl_file-kommandon, kan du ställa in utl_file_dir
parameter. Tyvärr är denna parameter systemomfattande, så du kommer inte att kunna bevilja/återkalla för en specifik användare som använder den här parametern. Tänk också på att om du gör ändringar i den här parametern kommer dessa ändringar inte att träda i kraft förrän Oracle-databasen startas om:
alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;
Konsultera 12.1 Oracle Docs
för mer information om utl_file_dir
.
Som sagt, om du verkligen vill begränsa vem som kan skapa Oracle-kataloger till specifika OS-kataloger, skulle en procedur vara lämplig för den uppgiften eftersom det skulle tillåta dig att ha finare kontroll (och begränsa vem som har den mycket kraftfulla create any directory
privilegium till ägaren av 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.