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

Jalankan DDL dinamis dalam prosedur PL/SQL melalui izin peran penentu

Anda hanya dapat menetapkan peran dalam prosedur/fungsi tersimpan PL/SQL jika memiliki Hak Invoker (AUTHID CURRENT_USER )(lihat dokumen) . Yang berarti Anda tidak dapat menggunakan ops_user untuk memanggil prosedur admin_user dan kemudian mengakses peran admin_user. Jika DBA Anda bersikeras menggunakan peran untuk mengontrol CREATE TABLE hak istimewa, inilah pendekatan yang pernah saya lihat sebelumnya:

create or replace package admin_user.role_test authid current_user is
    procedure test_permissions;
end role_test;
/
create or replace package body admin_user.role_test is
    procedure test_permissions is
        v_query_string VARCHAR2(400 CHAR) := 'begin 
dbms_output.put_line(''after'');
for r in (select role from session_roles) loop 
    dbms_output.put_line(r.role); 
end loop;
end;';
    begin
        dbms_output.put_line('before');
        for r in (select role from session_roles) loop
            dbms_output.put_line(r.role);
        end loop;
        DBMS_SESSION.SET_ROLE('CREATE_TABLE_ROLE IDENTIFIED BY "SECRET_PASSWORD"');
        execute immediate v_query_string;
        DBMS_SESSION.SET_ROLE('ALL EXCEPT CREATE_TABLE_ROLE'); -- restore defaults
    end;
end role_test;
/
grant execute on admin_user.role_test to ops_user;

Ini sementara akan memberikan peran kepada ops_user hanya untuk mengeksekusi kode Anda. Secara default ops_user seharusnya tidak dapat melihat sumber isi paket admin_user. Anda mungkin bisa membungkus badan paket untuk lebih melindungi kata sandi. Tetapi selain keamanan kata sandi, kekhawatiran terbesar saya dengan pendekatan ini adalah Oracle tidak menyediakan cara yang bagus untuk menonaktifkan satu peran, jadi jika ops_user memiliki peran lain yang dilindungi kata sandi, kode ini mungkin memunculkan ORA-01979 ketika mencoba untuk memulihkan mereka.

Jadi, ada jawabannya, tetapi saya tetap menyarankan untuk melakukan apa yang disarankan oleh komentator lain dan memberikan CREATE TABLE kepada pengguna admin Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Oracle JDeveloper 12c dengan Oracle Database, Bagian 2

  2. Oracle SQL - Kueri 2 tabel berdasarkan kunci asingnya

  3. Beberapa pertanyaan oracle masalah

  4. Bagaimana saya bisa membuat instance DataAdapter yang Diprofilkan untuk digunakan dengan MVC MINI PROFILER?

  5. PL/SQL pada SquirreL SQL Client 3.7.1