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

Oracle SQL में एक नीति कैसे लिखें जो किसी तालिका के लिए गैर-मालिकों तक पहुँच को प्रतिबंधित करती है?

आपको इसके बारे में कुछ भी करने की ज़रूरत नहीं है।

टेबल्स (और भीतर संग्रहीत डेटा) उपयोगकर्ता ए के स्वामित्व में हैं। कोई भी इसे जब तक . नहीं देख सकता है उपयोगकर्ता A अन्य उपयोगकर्ताओं को कुछ विशेषाधिकार प्रदान करता है, जैसे उपयोगकर्ता B.

यह चुनिंदा विशेषाधिकार प्रदान करके किया जा सकता है, अर्थात

grant select on my_table to user_B;

और उपयोगकर्ता B तब डेटा को इस रूप में लाएगा

select * from user_A.my_table;

उपयोगकर्ता बी डेटा को संशोधित करने में सक्षम नहीं होगा (क्योंकि इसे सम्मिलित/अपडेट/डिलीट नहीं किया गया था)।

इसके अलावा, आप (उपयोगकर्ता A के रूप में) एक दृश्य . बना सकते हैं जो डेटा के केवल एक हिस्से का चयन करता है, उदा.

create view v_my_table as 
  select * 
  from my_table
  where score > 4;

grant select on v_my_table to user_B;

ऐसा करने से, उपयोगकर्ता B को केवल वही पंक्तियाँ दिखाई देंगी जिनका स्कोर 4 से बड़ा है।

यदि उपयोगकर्ता सी है, तो यह बिल्कुल कुछ भी नहीं देख सकता है। यदि आप इसे कुछ डेटा देखना चाहते हैं, तो आप वही करेंगे जो आपने पहले से उपयोगकर्ता बी के साथ किया था - कुछ विशेषाधिकार प्रदान करें।

हालांकि, उपयोगकर्ता बी को अन्य उपयोगकर्ताओं के लिए "अग्रेषित" विशेषाधिकार देने का विकल्प है - आप with grant option का उपयोग करेंगे , उदा.

grant select on my_table to user_B with grant option;

यह उपयोगकर्ता बी को अन्य उपयोगकर्ताओं को चयन करने की अनुमति देगा, उदा.

grant select on user_A.my_table to user_C;

अंत में (इस उत्तर के बारे में बात करते हुए), यदि ऐसे कई उपयोगकर्ता हैं जिन्हें आप ऐसे विशेषाधिकार देना चाहते हैं, तो आप भूमिकाएं बना सकते हैं . फिर आप किसी भूमिका के लिए विशेषाधिकार प्रदान करेंगे, और किसी अन्य उपयोगकर्ता (उपयोगकर्ताओं) को भूमिका प्रदान करेंगे। यह आपको अपनी (और अन्य उपयोगकर्ताओं की) इच्छाओं के आधार पर भूमिकाओं को संशोधित करने की अनुमति देता है।

create role my_role;
grant select on my_table to my_role;

उदाहरण के लिए, शुरुआत के लिए, आप select . दे सकते हैं करने के लिए my_role , और फिर my_role . प्रदान करें उपयोगकर्ताओं के लिए B, C और D.

grant my_role to user_B;
grant my_role to user_C;

बाद में, आप insert grant दे सकते हैं करने के लिए my_role

grant insert on my_table to my_role;

और सभी उपयोगकर्ताओं को my_role granted प्रदान किया गया स्वचालित रूप से उपयोगकर्ता ए की my_table में पंक्तियों को सम्मिलित करने में सक्षम होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्तंभ के डिफ़ॉल्ट मान को संशोधित करने के लिए तालिका बदलें

  2. Oracle:महीने के हिसाब से विभाजन तालिका

  3. क्या आप तालिका से CSV फ़ाइल में डेटा स्पूल करने के लिए Oracle में एक प्रक्रिया लिखने में मेरी मदद कर सकते हैं?

  4. वर्ष के अनुसार अनुक्रम रीसेट करें, न कि न्यूनतम या अधिकतम मान के अनुसार

  5. चेकर रन