Oracle में उपयोगकर्ता और स्कीमा के बीच अंतर क्या है?
Oracle में उपयोगकर्ता और स्कीमा के बीच अंतर क्या है?
जवाबों:
आपको सभी स्कीमों और उद्देश्यों के लिए स्कीमा के रूप में सभी वस्तुओं के उपयोगकर्ता खाते और संग्रह पर विचार करना चाहिए।
SCOTT एक स्कीमा है जिसमें विभिन्न अनुदानों और अन्य सामानों के साथ EMP, DEPT और BONUS टेबल शामिल हैं।
एसवाईएस एक स्कीमा है जिसमें टन के टेबल, व्यू, ग्रांट आदि शामिल हैं।
सिस्टम एक स्कीमा है .....
तकनीकी रूप से - एक स्कीमा डेटाबेस द्वारा उपयोग किए जाने वाले मेटाडेटा (डेटा शब्दकोश) का एक सेट है, जो आमतौर पर डीडीएल का उपयोग करके उत्पन्न होता है। एक स्कीमा डेटाबेस की विशेषताओं को परिभाषित करता है, जैसे टेबल, कॉलम और गुण। एक डेटाबेस स्कीमा एक डेटाबेस में डेटा का विवरण है।
मेरा मानना है कि समस्या यह है कि ओरेकल स्कीमा शब्द का इस्तेमाल आम तौर पर इसके मतलब से थोड़ा अलग है।
अर्थ में स्कीमा 2. समान है, लेकिन अर्थ में स्कीमा के समान नहीं है। 1. कई डीबी खातों का उपयोग करने वाले एप्लिकेशन के लिए, अर्थ 2 में एक स्कीमा में कई ओरेकल स्कीमा :-) शामिल हो सकते हैं।
प्लस स्कीमा का अर्थ अन्य का एक गुच्छा भी हो सकता है, अन्य संदर्भों में काफी असंबंधित चीजें (जैसे गणित में)।
ओरेकल को बस ओवरलोडिन "स्कीमा" के बजाय "यूजरएरिया" या "अकाउंटोबिज" जैसे शब्द का इस्तेमाल करना चाहिए ...
से WikiAnswers :
इसके अलावा, एक उपयोगकर्ता अपने स्वयं के अलावा स्कीमा में वस्तुओं का उपयोग कर सकता है, यदि उनके पास ऐसा करने की अनुमति है।
एक उपयोगकर्ता के बारे में सोचें जैसा कि आप सामान्य रूप से करते हैं (उपयोगकर्ता नाम / पासवर्ड सिस्टम में कुछ वस्तुओं को लॉग इन करने और एक्सेस करने के लिए) और उपयोगकर्ता के होम डायरेक्टरी के डेटाबेस संस्करण के रूप में एक स्कीमा। उपयोगकर्ता "फू" आम तौर पर स्कीमा "फू" के तहत चीजें बनाता है, उदाहरण के लिए, यदि उपयोगकर्ता "फू" तालिका "बार" बनाता है या संदर्भित करता है, तो ओरेकल यह मान लेगा कि उपयोगकर्ता का अर्थ है "foo.bar"।
यह उत्तर एक मालिक और स्कीमा के बीच अंतर को परिभाषित नहीं करता है, लेकिन मुझे लगता है कि यह चर्चा में जोड़ता है।
मेरी छोटी सोच की दुनिया में:
मैंने इस विचार के साथ संघर्ष किया है कि मैं एन उपयोगकर्ताओं की संख्या बनाता हूं जहां मैं चाहता हूं कि इनमें से प्रत्येक उपयोगकर्ता एक एकल स्कीमा "उपभोग" (उर्फ, उपयोग) करे।
Oracle-base.com पर टिम दिखाता है कि यह कैसे करना है (उपयोगकर्ताओं की एन संख्या है और इनमें से प्रत्येक उपयोगकर्ता एक एकल स्कीमा के लिए "पुनर्निर्देशित" होगा।
उनका दूसरा "पर्यायवाची" दृष्टिकोण है (यहाँ सूचीबद्ध नहीं है)। मैं केवल CURRENT_SCHEMA संस्करण (उनके दृष्टिकोणों में से एक) यहाँ उद्धृत कर रहा हूँ:
CURRENT_SCHEMA
पहुंचयह विधि
CURRENT_SCHEMA
सही उपयोगकर्ता के लिए अनुप्रयोग उपयोगकर्ताओं को स्वचालित रूप से इंगित करने के लिए सत्र विशेषता का उपयोग करती है ।सबसे पहले, हम स्कीमा मालिक और एक एप्लिकेशन उपयोगकर्ता बनाते हैं।
CONN sys/password AS SYSDBA -- Remove existing users and roles with the same names. DROP USER schema_owner CASCADE; DROP USER app_user CASCADE; DROP ROLE schema_rw_role; DROP ROLE schema_ro_role; -- Schema owner. CREATE USER schema_owner IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; GRANT CONNECT, CREATE TABLE TO schema_owner; -- Application user. CREATE USER app_user IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; GRANT CONNECT TO app_user;
ध्यान दें कि एप्लिकेशन उपयोगकर्ता कनेक्ट कर सकता है, लेकिन ऑब्जेक्ट बनाने के लिए कोई टेबलस्पेस कोटा या विशेषाधिकार नहीं है।
अगला, हम पढ़ने-लिखने और केवल-पढ़ने के लिए उपयोग की अनुमति देने के लिए कुछ भूमिकाएँ बनाते हैं।
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
हम अपने एप्लिकेशन उपयोगकर्ता को स्कीमा ऑब्जेक्ट के लिए रीड-राइट एक्सेस देना चाहते हैं, इसलिए हम संबंधित भूमिका प्रदान करते हैं।
GRANT schema_rw_role TO app_user;
हमें यह सुनिश्चित करने की आवश्यकता है कि एप्लिकेशन उपयोगकर्ता के पास स्कीमा मालिक को इंगित करने के लिए उसका डिफ़ॉल्ट स्कीमा है, इसलिए हम हमारे लिए ऐसा करने के लिए एक AFERT LOGON ट्रिगर बनाते हैं।
CREATE OR REPLACE TRIGGER app_user.after_logon_trg AFTER LOGON ON app_user.SCHEMA BEGIN DBMS_APPLICATION_INFO.set_module(USER, 'Initialized'); EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema=SCHEMA_OWNER'; END; /
अब हम स्कीमा मालिक में एक ऑब्जेक्ट बनाने के लिए तैयार हैं।
CONN schema_owner/password CREATE TABLE test_tab ( id NUMBER, description VARCHAR2(50), CONSTRAINT test_tab_pk PRIMARY KEY (id) ); GRANT SELECT ON test_tab TO schema_ro_role; GRANT SELECT, INSERT, UPDATE, DELETE ON test_tab TO schema_rw_role;
ध्यान दें कि संबंधित भूमिकाओं के विशेषाधिकार कैसे दिए जाते हैं। इसके बिना, ऑब्जेक्ट एप्लिकेशन उपयोगकर्ता को दिखाई नहीं देंगे। अब हमारे पास एक कार्य स्कीमा मालिक और अनुप्रयोग उपयोगकर्ता है।
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
यह विधि आदर्श है जहां एप्लिकेशन उपयोगकर्ता केवल मुख्य स्कीमा के लिए एक वैकल्पिक प्रवेश बिंदु है, जिसकी स्वयं की कोई वस्तु की आवश्यकता नहीं है।
यह बहुत सरल है।
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
उपयोगकर्ता को अलग-अलग उपयोगकर्ताओं के स्वामित्व वाली स्कीमा वस्तुओं तक पहुंच दी जा सकती है।
स्कीमा DB.objects के बारे में एक विचार / इंट्रेस्ट का डोमेन है, और एक उपयोगकर्ता के स्वामित्व में है। फिर इसे अन्य उपयोगकर्ताओं / अनुप्रयोगों द्वारा दमित भूमिकाओं के साथ साझा किया जाएगा। इसलिए उपयोगकर्ताओं को एक स्कीमा की आवश्यकता नहीं है, लेकिन एक स्कीमा के लिए एक स्वामी होना आवश्यक है।
एक उपयोगकर्ता खाता रिश्तेदारों की तरह होता है जो आपके घर की चाबी रखता है, लेकिन उसके पास कुछ भी नहीं होता है अर्थात उपयोगकर्ता खाता किसी भी डेटाबेस ऑब्जेक्ट का मालिक नहीं होता है ... कोई डेटा डिक्शनरी ...
जबकि स्कीमा डेटाबेस ऑब्जेक्ट्स का एक एनकैप्सुलेशन है। यह घर के मालिक की तरह है जो आपके घर में सब कुछ का मालिक है और एक उपयोगकर्ता खाता घर पर सामान का उपयोग करने में सक्षम होगा, जब मालिक यानी स्कीमा इसके लिए आवश्यक अनुदान देता है।
--USER और SCHEMA
उपयोगकर्ता और स्कीमा दोनों शब्द परस्पर भिन्न होते हैं, यही कारण है कि अधिकांश लोगों को इस शब्द पर भ्रम होता है नीचे मैंने उनके बीच के अंतर को समझाया
- उपयोगकर्ता उपयोगकर्ता डेटाबेस (सर्वर) को जोड़ने के लिए एक खाता है। हम सृजित USER user_name IDENTIFIED BY पासवर्ड का उपयोग करके उपयोगकर्ता बना सकते हैं।
--Schema
दरअसल Oracle डेटाबेस में डेटा को प्रोसेस करने के लिए लॉजिकल और फिजिकल स्ट्रक्यूट होता है। डेटा डेटाबेस (मेमोरी कंपोनेंट) में प्रोसेस करने के लिए स्कीमा भी लॉजिकल स्ट्रक्चर होता है। उपयोगकर्ता द्वारा बनाए जाने पर oracle द्वारा इसका स्वचालित रूप से निर्माण किया गया। इसमें उस स्कीमा से संबंधित उपयोगकर्ता द्वारा बनाई गई सभी ऑब्जेक्ट शामिल हैं। उदाहरण के लिए, यदि मैंने एक उपयोगकर्ता बनाया है जिसका नाम santhosh है, तो oracle createts santhosh नामक एक स्कीमा बनाया है, oracle संग्रह सभी वस्तुओं को santhosh में उपयोगकर्ता santhosh द्वारा बनाए गए संग्रहीत करता है स्कीमा।
हम क्रिएट स्कीमा स्टेटमेंट द्वारा स्कीमा बना सकते हैं, लेकिन ओरेकल स्वचालित रूप से उस स्कीमा के लिए एक उपयोगकर्ता बना सकता है।
हम DROP SCHEMA schama_name RESTRICT स्टेटमेंट का उपयोग करके स्कीमा को छोड़ सकते हैं लेकिन यह scehema में ऑब्जेक्ट्स नहीं हटा सकता है, इसलिए स्कीमा को छोड़ने के लिए इसे खाली होना चाहिए। प्रतिबंधित शब्द को उस ऑब्जेक्ट के साथ स्कीमा को निर्दिष्ट करने के लिए प्रतिबंधित करें।
यदि हम किसी उपयोगकर्ता को छोड़ने की कोशिश करते हैं तो उसके स्कीमा में ऑब्जेक्ट होते हैं हमें CASCADE शब्द को निर्दिष्ट करना चाहिए क्योंकि ऑरेकल आपको उपयोगकर्ता को हटाने की अनुमति नहीं देता है जिसमें ऑब्जेक्ट शामिल हैं। DROP USER user_name CASCADE इसलिए oracle स्कीमा में ऑब्जेक्ट्स को हटाता है और फिर यह उपयोगकर्ता को स्वचालित रूप से ड्रॉप करता है, इस स्कीमा ऑब्जेक्ट्स को अन्य स्कीमा से संदर्भित किया जाता है जैसे कि व्यू और निजी समानार्थी शब्द अमान्य स्थिति में जाते हैं।
मुझे उम्मीद है कि अब आपको उनके बीच का अंतर मिल जाएगा, अगर आपको इस विषय पर कोई संदेह है, तो कृपया बेझिझक पूछें।
धन्यवाद।
Oracle के मेरे अल्प ज्ञान के आधार पर ... एक USER और एक SCHEMA कुछ इसी तरह के हैं। लेकिन एक बड़ा अंतर यह भी है। एक USER को एक SCHEMA कहा जा सकता है यदि "USER" किसी भी वस्तु का स्वामी है, अन्यथा ... यह केवल "USER" ही रहेगा। एक बार यदि USER कम से कम एक वस्तु का मालिक है, तो उपरोक्त सभी परिभाषाओं के आधार पर .... USER को अब SCHEMA कहा जा सकता है।
उपयोगकर्ता: डेटाबेस के संसाधन तक पहुंच। जैसे घर में घुसने की चाबी।
स्कीमा: डेटाबेस ऑब्जेक्ट्स के बारे में जानकारी का संग्रह। जैसे आपकी पुस्तक में सूचकांक जिसमें अध्याय के बारे में संक्षिप्त जानकारी है।
अधिकांश लोग जो मारबीडीबी या माईएसक्यूएल से अधिक परिचित हैं, उनके लिए यह थोड़ा भ्रामक लगता है क्योंकि मारियाबीडी या माईएसक्यूएल में उनके अलग-अलग स्कीमा हैं (जिसमें अलग-अलग तालिकाएँ, दृश्य, पीएलएसडी ब्लॉक और डीबी ऑब्जेक्ट्स आदि शामिल हैं) और USERS वे खाते हैं जो उन तक पहुँच सकते हैं स्कीमा। इसलिए कोई विशिष्ट उपयोगकर्ता किसी विशेष स्कीमा से संबंधित नहीं हो सकता है। अनुमति उस स्कीमा को दी जाती है, तब उपयोगकर्ता उस तक पहुंच सकता है। उपयोगकर्ता और स्कीमा MySQL और MariaDB जैसे डेटाबेस में अलग हो गए हैं।
ओरेकल स्कीमा में और उपयोगकर्ताओं को लगभग समान माना जाता है। उस स्कीमा के साथ काम करने के लिए आपको अनुमति की आवश्यकता होती है, जहां आपको लगेगा कि स्कीमा नाम उपयोगकर्ता नाम के अलावा और कुछ नहीं है। अलग-अलग डेटाबेस ऑब्जेक्ट को अलग-अलग स्कीमा से एक्सेस करने के लिए स्कीमा में अनुमतियाँ दी जा सकती हैं। ओरेकल में हम कह सकते हैं कि एक उपयोगकर्ता एक स्कीमा का मालिक है क्योंकि जब आप एक उपयोगकर्ता बनाते हैं तो आप इसके लिए डीबी ऑब्जेक्ट बनाते हैं और इसके विपरीत।
स्कीमा वस्तुओं का एक कंटेनर है। यह एक उपयोगकर्ता के स्वामित्व में है।
A
पास स्कीमा पर पूर्ण व्यवस्थापक अधिकार हो सकते हैं B
, बाद वाला हमेशा उपयोगकर्ता के स्वामित्व में रहेगा B
, भले ही कोई भी इस तरह के उपयोगकर्ता नाम के साथ लॉग इन न करे।
ठीक है, मैंने कहीं पढ़ा है कि यदि आपके डेटाबेस उपयोगकर्ता के पास डीडीएल विशेषाधिकार है तो यह एक स्कीमा है, अन्यथा यह एक उपयोगकर्ता है।