Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

निश्चित भूमिका अनुमतियों के माध्यम से पीएल/एसक्यूएल प्रक्रिया में गतिशील डीडीएल निष्पादित करें

आप केवल PL/SQL संग्रहीत कार्यविधि/फ़ंक्शन के भीतर एक भूमिका सेट कर सकते हैं यदि उसके पास आमंत्रक के अधिकार हैं (AUTHID CURRENT_USER )(doc देखें) . जिसका अर्थ है कि आप admin_user की प्रक्रिया को कॉल करने के लिए ops_user का उपयोग नहीं कर सकते हैं और फिर admin_user की भूमिकाओं तक पहुंच सकते हैं। यदि आपका डीबीए CREATE TABLE . को नियंत्रित करने के लिए भूमिका का उपयोग करने पर जोर देता है विशेषाधिकार, यहाँ वह तरीका है जो मैंने पहले देखा है:

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;

यह अस्थायी रूप से केवल आपके कोड को निष्पादित करने के लिए ops_user को भूमिका प्रदान करेगा। डिफ़ॉल्ट रूप से ops_user को admin_user के पैकेज बॉडी स्रोत को देखने में सक्षम नहीं होना चाहिए। पासवर्ड को और सुरक्षित रखने के लिए आप शायद पैकेज बॉडी को लपेट सकते हैं। लेकिन पासवर्ड सुरक्षा एक तरफ, इस दृष्टिकोण के साथ मेरी सबसे बड़ी चिंता यह है कि Oracle एकल भूमिका को अक्षम करने का एक अच्छा तरीका प्रदान नहीं करता है, इसलिए यदि ops_user की अन्य पासवर्ड-संरक्षित भूमिकाएँ हैं, तो यह कोड ORA-01979 बढ़ा सकता है जब यह पुनर्स्थापित करने का प्रयास करता है उन्हें।

तो, एक उत्तर है, लेकिन मैं अब भी वही करने की सलाह दूंगा जो अन्य टिप्पणीकारों ने सुझाया था और आपके व्यवस्थापक उपयोगकर्ता को तालिका बनाने की अनुमति दी थी।




  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.DataAccess बेमेल त्रुटि

  2. Oracle® . से SQL सर्वर संग्रहीत कार्यविधियाँ

  3. पीएल/एसक्यूएल सीखने के लिए विकास का माहौल तैयार करना

  4. ऑर्डर करने के बाद ओरेकल क्वेरी द्वारा लौटाई गई पंक्तियों की संख्या को मैं कैसे सीमित करूं?

  5. दो तिथियों के बीच की तिथियां ढूँढना (सर्वोत्तम अभ्यास)