Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle Bagaimana cara memberikan CREATE ANY DIRECTORY dengan batasan bahwa semua direktori harus dibuat di dalam direktori yang diberikan?

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java - Bagaimana cara memanggil prosedur Oracle dengan tipe khusus?

  2. Fungsi Oracle:Replikasi wm_concat

  3. Groovy SQL Oracle Array Fungsi/Prosedur Keluar Registrasi Parameter

  4. ODP.Net - OracleDataReader.Baca sangat lambat

  5. Cara membandingkan nilai numerik dalam kolom yang sama untuk beberapa kolom menggunakan Oracle SQL