sql >> Databasteknik >  >> RDS >> Oracle

Oracle Hur beviljar man SKAPA NÅGON KATALOG med begränsningen att alla kataloger måste skapas i en given katalog?

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.


  1. slå samman flera bord

  2. hur tar du bort snedstrecket (\) i json-svaret med php?

  3. Trigger för att spåra ändringar i MySQL-databasen

  4. Mocka Testa anslutning till DB