2008-10-09 11 views
36

मुझे किसी विशिष्ट उपयोगकर्ता के स्वामित्व वाली सभी तालिकाओं के लिए किसी अन्य उपयोगकर्ता को चुनिंदा अनुमति प्रदान करने की आवश्यकता है। मैं की तर्ज पर एक भी आदेश के साथ ऐसा कर सकते हैं:विशिष्ट उपयोगकर्ता द्वारा स्वामित्व वाले सभी टेबल्स पर अनुदान चयन

Grant Select on OwningUser.* to ReceivingUser 

या मैं की तर्ज पर कुछ के साथ हर तालिका के लिए एसक्यूएल उत्पन्न करने के लिए है:

Select 'GRANT SELECT ON OwningUser.'||Table_Name||'TO ReceivingUser' 
From All_Tables Where Owner='OWNINGUSER' 

उत्तर

50

खैर, यह एक नहीं है एकल कथन है, लेकिन इसके बारे में के रूप में करीब है के रूप में आप ओरेकल के साथ प्राप्त कर सकते हैं: इसके संभावित, इस आदेश चला

BEGIN 
    FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='TheOwner') LOOP 
     EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to TheUser'; 
    END LOOP; 
END; 
+2

इसके अलावा 'v में (selec टी OWNER, VIEW_NAME ALL_VIEWS से जहां OWNER = 'XXX') लूप ' – gavenkoa

-3

हाँ,:

कहते हैं कि तुम उपयोगकर्ता कहा जाता thoko

grant select any table, insert any table, delete any table, update any table to thoko; 

टिप्पणी प्राप्त हो जाता है: Oracle डाटाबेस पर

+1

यह सभी स्कीमा पर प्रदान करेगा, और इसे प्रदान करने के लिए सिस्टम विशेषाधिकार की आवश्यकता होगी – Petr

1

टेबल + विचारों + रिपोर्टिंग

SET SERVEROUT ON 
DECLARE 
    o_type VARCHAR2(60) := ''; 
    o_name VARCHAR2(60) := ''; 
    o_owner VARCHAR2(60) := ''; 
    l_error_message VARCHAR2(500) := ''; 
BEGIN 
    FOR R IN (SELECT owner, object_type, object_name 
      FROM all_objects 
      WHERE owner='SCHEMANAME' 
      AND object_type IN ('TABLE','VIEW') 
      ORDER BY 1,2,3) LOOP 
    BEGIN 
    o_type := r.object_type; 
    o_owner := r.owner; 
    o_name := r.object_name; 
    DBMS_OUTPUT.PUT_LINE(o_type||' '||o_owner||'.'||o_name); 
    EXECUTE IMMEDIATE 'grant select on '||o_owner||'.'||o_name||' to USERNAME'; 
    EXCEPTION 
     WHEN OTHERS THEN 
     l_error_message := sqlerrm; 
     DBMS_OUTPUT.PUT_LINE('Error with '||o_type||' '||o_owner||'.'||o_name||': '|| l_error_message); 
     CONTINUE; 
    END; 
    END LOOP; 
END; 
/
0

http://psoug.org/reference/roles.html से, अपने उपयोगकर्ता के लिए अपने डेटाबेस पर एक प्रक्रिया बनाने त्रुटि काम किया ऐसा करने के लिए:

CREATE OR REPLACE PROCEDURE GRANT_SELECT(to_user in varchar2) AS 

    CURSOR ut_cur IS SELECT table_name FROM user_tables; 

    RetVal NUMBER; 
    sCursor INT; 
    sqlstr VARCHAR2(250); 

BEGIN 
    FOR ut_rec IN ut_cur 
    LOOP 
     sqlstr := 'GRANT SELECT ON '|| ut_rec.table_name || ' TO ' || to_user; 
     sCursor := dbms_sql.open_cursor; 
     dbms_sql.parse(sCursor,sqlstr, dbms_sql.native); 
     RetVal := dbms_sql.execute(sCursor); 
     dbms_sql.close_cursor(sCursor); 

    END LOOP; 
END grant_select; 
संबंधित मुद्दे