sql >> Database teknologi >  >> RDS >> Oracle

Oracle Hvordan tildeler man CREATE ENHVER DIRECTORY med den begrænsning, at alle mapper skal oprettes i en given mappe?

Det afhænger af, om du vil begrænse, hvilke OS-mapper Oracle kan få adgang til fra utl_file-kommandoer, kan du indstille utl_file_dir parameter. Desværre er denne parameter systemdækkende, så du vil ikke være i stand til at tildele/tilbagekalde for en bestemt bruger ved at bruge denne parameter. Husk også, at hvis du foretager ændringer i denne parameter, træder disse ændringer ikke i kraft, før Oracle-databasen genstartes:

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

Se 12.1 Oracle Docs for mere information om utl_file_dir .

Når det er sagt, hvis du virkelig ønsker at begrænse, hvem der kan oprette Oracle-kataloger til specifikke OS-mapper, ville en procedure være passende til den opgave, da det ville tillade dig at have en mere finkornet kontrol (og begrænse, hvem der har den meget kraftfulde create any directory privilegium til ejeren af ​​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. Understøtter Oracle fuldtekstsøgning?

  2. PHP MYSQL SUM i alt, men vis rækker

  3. Hvorfor vil dette regex ikke fungere i postgreSQL

  4. Repliker tabeller fra forskellige databaser på samme mysql-server