Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle Как да се предостави CREATE ANY DIRECTORY с ограничението, че всички директории трябва да бъдат създадени в дадена директория?

Това зависи, ако искате да ограничите кои OS директории Oracle да има достъп от utl_file команди, можете да зададете utl_file_dir параметър. За съжаление, този параметър е системен, така че няма да можете да предоставите/отмените за конкретен потребител, като използвате този параметър. Също така имайте предвид, че ако направите промени в този параметър, тези промени няма да влязат в сила, докато базата данни на Oracle не бъде рестартирана:

alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;

Консултирайте се с 12.1 Oracle Docs за повече информация относно utl_file_dir .

Въпреки това, ако наистина искате да ограничите кой може да създава директории на Oracle до конкретни директории на ОС, процедура би била подходяща за тази задача, тъй като това ще ви позволи да имате по-фин контрол (и да ограничите кой има много мощния create any directory привилегия за собственика на процедурата):

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избройте всички тригери в базата данни на Oracle

  2. извличане на данни с помощта на rownum в oracle

  3. Tomcat използва ли кеширани версии на pl/sql модули?

  4. ORA-00918:колона двусмислено дефинирана в SELECT *

  5. Как да получите брой хора въз основа на възрастови групи с помощта на SQL заявка в база данни на Oracle?