Oracle में उपयोगकर्ता और स्कीमा के बीच अंतर?


314

Oracle में उपयोगकर्ता और स्कीमा के बीच अंतर क्या है?


17
+1 मैं हमेशा से ही इस भेद के बारे में सोचता रहा हूं: - /।
sleske

9
नीचे एक दिलचस्प लेख है जिसमें सभी शंकाओं को दूर किया गया है: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
संदीप जिंदल

9
ओरेकल स्कीमा विंडोज़ ओएस में मेरे दस्तावेज़ फ़ोल्डर की तरह हैं। एक उपयोगकर्ता अपने स्कीमा में चीजों को देखने के लिए अन्य उपयोगकर्ताओं को अनुमति दे सकता है। ओरेकल स्कीमा अनिवार्य रूप से एक उपयोगकर्ता का कार्यक्षेत्र है।
टार्ज़न

3
DBA पर भी चर्चा की गई: dba.stackexchange.com/questions/37012/…

जवाबों:


136

टॉम से पूछो

आपको सभी स्कीमों और उद्देश्यों के लिए स्कीमा के रूप में सभी वस्तुओं के उपयोगकर्ता खाते और संग्रह पर विचार करना चाहिए।

SCOTT एक स्कीमा है जिसमें विभिन्न अनुदानों और अन्य सामानों के साथ EMP, DEPT और BONUS टेबल शामिल हैं।

एसवाईएस एक स्कीमा है जिसमें टन के टेबल, व्यू, ग्रांट आदि शामिल हैं।

सिस्टम एक स्कीमा है .....

तकनीकी रूप से - एक स्कीमा डेटाबेस द्वारा उपयोग किए जाने वाले मेटाडेटा (डेटा शब्दकोश) का एक सेट है, जो आमतौर पर डीडीएल का उपयोग करके उत्पन्न होता है। एक स्कीमा डेटाबेस की विशेषताओं को परिभाषित करता है, जैसे टेबल, कॉलम और गुण। एक डेटाबेस स्कीमा एक डेटाबेस में डेटा का विवरण है।


47
एक ही पृष्ठ से: सभी इरादों और उद्देश्यों के लिए बस उपयोगकर्ता = स्कीमा = उपयोगकर्ता = स्कीमा = एक ही चीज़ पर विचार करें।
22'09

4
लेकिन क्या एक ही स्कीमा का उपयोग करने वाले मेरे दो उपयोगकर्ता हो सकते हैं?
जॉन जॉन पिचलर

6
यदि आप "एकल स्कीमा में वस्तुओं को कई उपयोगकर्ताओं द्वारा 'स्वामित्व में हो सकते हैं", तो इसका उत्तर है कि नहीं। यदि आपका मतलब है "एकल स्कीमा में वस्तुओं का उपयोग कई उपयोगकर्ताओं द्वारा किया जा सकता है" तो इसका उत्तर निश्चित रूप से है
महेश

95

मेरा मानना ​​है कि समस्या यह है कि ओरेकल स्कीमा शब्द का इस्तेमाल आम तौर पर इसके मतलब से थोड़ा अलग है।

  1. ओरेकल का स्कीमा (जैसा कि नेबाकेंज़र के उत्तर में समझाया गया है): मूल रूप से उपयोगकर्ता खाते के स्वामित्व वाली सभी तालिकाओं और अन्य वस्तुओं का सेट, इसलिए उपयोगकर्ता खाते के लगभग बराबर।
  2. सामान्य रूप से स्कीमा: सभी टेबल, स्प्रोक्स आदि का सेट जो किसी दिए गए सिस्टम / एप्लिकेशन के लिए डेटाबेस बनाता है (जैसा कि "डेवलपर्स को हमारे नए एप्लिकेशन के लिए स्कीमा के बारे में डीबीए के साथ चर्चा करनी चाहिए।"

अर्थ में स्कीमा 2. समान है, लेकिन अर्थ में स्कीमा के समान नहीं है। 1. कई डीबी खातों का उपयोग करने वाले एप्लिकेशन के लिए, अर्थ 2 में एक स्कीमा में कई ओरेकल स्कीमा :-) शामिल हो सकते हैं।

प्लस स्कीमा का अर्थ अन्य का एक गुच्छा भी हो सकता है, अन्य संदर्भों में काफी असंबंधित चीजें (जैसे गणित में)।

ओरेकल को बस ओवरलोडिन "स्कीमा" के बजाय "यूजरएरिया" या "अकाउंटोबिज" जैसे शब्द का इस्तेमाल करना चाहिए ...


@djangofan Afaik यह प्रश्न Oracle के बारे में है, और MS SQL के बारे में नहीं है।
पीटर - मोनिका

62

से WikiAnswers :

  • एक स्कीमा डेटाबेस ऑब्जेक्ट्स का संग्रह है, जिसमें तार्किक संरचनाएं जैसे टेबल, व्यू, अनुक्रम, संग्रहीत कार्यविधियाँ, समानार्थक शब्द, इंडेक्स, क्लस्टर और डेटाबेस लिंक शामिल हैं।
  • एक उपयोगकर्ता एक स्कीमा का मालिक है।
  • एक उपयोगकर्ता और स्कीमा का एक ही नाम है।
  • क्रिएट USER कमांड एक उपयोगकर्ता बनाता है। यह स्वचालित रूप से उस उपयोगकर्ता के लिए एक स्कीमा भी बनाता है।
  • क्रिएट स्कीमा कमांड एक "स्कीमा" नहीं बनाता है जैसा कि इसका तात्पर्य है, यह आपको केवल एक ही लेनदेन में कई टेबल और विचार बनाने और अपने स्वयं के स्कीमा में कई अनुदान प्रदर्शन करने की अनुमति देता है।
  • सभी इरादों और उद्देश्यों के लिए आप एक उपयोगकर्ता को एक स्कीमा और एक स्कीमा को एक उपयोगकर्ता मान सकते हैं।

इसके अलावा, एक उपयोगकर्ता अपने स्वयं के अलावा स्कीमा में वस्तुओं का उपयोग कर सकता है, यदि उनके पास ऐसा करने की अनुमति है।


3
अच्छी बात फिर से सृजन - मैं सोचता हूँ कि आदेश के लिए एक खराब चुना नाम!
जेफरी केम्प

4
"क्रिएट स्कीमा कमांड" स्कीमा "नहीं बनाता है क्योंकि इसका तात्पर्य है"। मुझे लगता है कि 99% भ्रम इसी से आता है। और यह वाक्य टुकड़ा इसे बहुत अच्छी तरह से साफ करता है। धन्यवाद।
ग्रेनडाकर


मुझे लगता है कि यह सबसे अच्छा जवाब है।
hagrawal

50

एक उपयोगकर्ता के बारे में सोचें जैसा कि आप सामान्य रूप से करते हैं (उपयोगकर्ता नाम / पासवर्ड सिस्टम में कुछ वस्तुओं को लॉग इन करने और एक्सेस करने के लिए) और उपयोगकर्ता के होम डायरेक्टरी के डेटाबेस संस्करण के रूप में एक स्कीमा। उपयोगकर्ता "फू" आम तौर पर स्कीमा "फू" के तहत चीजें बनाता है, उदाहरण के लिए, यदि उपयोगकर्ता "फू" तालिका "बार" बनाता है या संदर्भित करता है, तो ओरेकल यह मान लेगा कि उपयोगकर्ता का अर्थ है "foo.bar"।


2
साफ-सुथरा वर्णन लेकिन आपने उपयोगकर्ता और स्कीमा दोनों के लिए "फू" का उपयोग क्यों किया है ?! क्या उन्हें एक ही होना है?
जोनिरा 12

Oracle में, USER खाता नाम है, SCHEMA उस उपयोगकर्ता के स्वामित्व वाली वस्तुओं का समूह है। भले ही, ओरेकल क्रिएट USER स्टेटमेंट के हिस्से के रूप में SCHEMA ऑब्जेक्ट बनाता है और SCHEMA का USER जैसा ही नाम है, लेकिन वे एक ही बात नोट करते हैं। बेशक, भ्रम इस तथ्य से आंशिक रूप से उपजा है कि USER और SCHEMA के बीच एक-से-एक पत्राचार है, और उपयोगकर्ता का स्कीमा अपना नाम साझा करता है।
महेश

17

यह उत्तर एक मालिक और स्कीमा के बीच अंतर को परिभाषित नहीं करता है, लेकिन मुझे लगता है कि यह चर्चा में जोड़ता है।

मेरी छोटी सोच की दुनिया में:

मैंने इस विचार के साथ संघर्ष किया है कि मैं एन उपयोगकर्ताओं की संख्या बनाता हूं जहां मैं चाहता हूं कि इनमें से प्रत्येक उपयोगकर्ता एक एकल स्कीमा "उपभोग" (उर्फ, उपयोग) करे।

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>

यह विधि आदर्श है जहां एप्लिकेशन उपयोगकर्ता केवल मुख्य स्कीमा के लिए एक वैकल्पिक प्रवेश बिंदु है, जिसकी स्वयं की कोई वस्तु की आवश्यकता नहीं है।


1
ध्यान दें कि भूमिकाओं का उपयोग पीएल / एसक्यूएल कोड के लिए अनुमति के मुद्दों को हल नहीं कर सकता है। भूमिकाओं के लिए अनुदान को सहज तरीके से प्रचारित नहीं किया जाता है जब संग्रहीत प्रक्रियाओं को संकलित किया जाता है। हालाँकि, मैंने इस उत्तर को गलत ठहराया क्योंकि यह दृष्टिकोण वास्तव में बहुत अच्छा है, लेकिन यह बहुत कम ज्ञात है और शायद ही कभी इसका उपयोग किया जाता है जहाँ तक मैं बता सकता हूँ।
एंड्रयू वुल्फ

15

यह बहुत सरल है।

If USER has OBJECTS
then call it SCHEMA
else
     call it USER
end if;

उपयोगकर्ता को अलग-अलग उपयोगकर्ताओं के स्वामित्व वाली स्कीमा वस्तुओं तक पहुंच दी जा सकती है।


1
दरअसल भ्रम तब पैदा होता है जब लोग कॉल करते हैं - उपयोगकर्ता स्कीमा है। जैसा कि आपने समझाया था कि उपयोगकर्ता स्कीमा नहीं हो सकता है। एक उपयोगकर्ता कुछ अन्य उपयोगकर्ता स्कीमा को एक्सेस करने वाला उपयोगकर्ता हो सकता है।
संदीप जिंदल

3

स्कीमा DB.objects के बारे में एक विचार / इंट्रेस्ट का डोमेन है, और एक उपयोगकर्ता के स्वामित्व में है। फिर इसे अन्य उपयोगकर्ताओं / अनुप्रयोगों द्वारा दमित भूमिकाओं के साथ साझा किया जाएगा। इसलिए उपयोगकर्ताओं को एक स्कीमा की आवश्यकता नहीं है, लेकिन एक स्कीमा के लिए एक स्वामी होना आवश्यक है।


1

एक उपयोगकर्ता खाता रिश्तेदारों की तरह होता है जो आपके घर की चाबी रखता है, लेकिन उसके पास कुछ भी नहीं होता है अर्थात उपयोगकर्ता खाता किसी भी डेटाबेस ऑब्जेक्ट का मालिक नहीं होता है ... कोई डेटा डिक्शनरी ...

जबकि स्कीमा डेटाबेस ऑब्जेक्ट्स का एक एनकैप्सुलेशन है। यह घर के मालिक की तरह है जो आपके घर में सब कुछ का मालिक है और एक उपयोगकर्ता खाता घर पर सामान का उपयोग करने में सक्षम होगा, जब मालिक यानी स्कीमा इसके लिए आवश्यक अनुदान देता है।


1

--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 स्कीमा में ऑब्जेक्ट्स को हटाता है और फिर यह उपयोगकर्ता को स्वचालित रूप से ड्रॉप करता है, इस स्कीमा ऑब्जेक्ट्स को अन्य स्कीमा से संदर्भित किया जाता है जैसे कि व्यू और निजी समानार्थी शब्द अमान्य स्थिति में जाते हैं।

मुझे उम्मीद है कि अब आपको उनके बीच का अंतर मिल जाएगा, अगर आपको इस विषय पर कोई संदेह है, तो कृपया बेझिझक पूछें।

धन्यवाद।


0

एक स्कीमा और डेटाबेस उपयोगकर्ता समान होते हैं लेकिन यदि स्कीमा के पास डेटाबेस ऑब्जेक्ट्स हैं और वे अपनी वस्तु कुछ भी कर सकते हैं लेकिन उपयोगकर्ता ऑब्जेक्ट्स को एक्सेस करते हैं, तो वे किसी भी DDL ऑपरेशन को तब तक नहीं कर सकते जब तक स्कीमा उपयोगकर्ता आपको उचित विशेषाधिकार नहीं देते।


0

Oracle के मेरे अल्प ज्ञान के आधार पर ... एक USER और एक SCHEMA कुछ इसी तरह के हैं। लेकिन एक बड़ा अंतर यह भी है। एक USER को एक SCHEMA कहा जा सकता है यदि "USER" किसी भी वस्तु का स्वामी है, अन्यथा ... यह केवल "USER" ही रहेगा। एक बार यदि USER कम से कम एक वस्तु का मालिक है, तो उपरोक्त सभी परिभाषाओं के आधार पर .... USER को अब SCHEMA कहा जा सकता है।


0

उपयोगकर्ता: डेटाबेस के संसाधन तक पहुंच। जैसे घर में घुसने की चाबी।

स्कीमा: डेटाबेस ऑब्जेक्ट्स के बारे में जानकारी का संग्रह। जैसे आपकी पुस्तक में सूचकांक जिसमें अध्याय के बारे में संक्षिप्त जानकारी है।

विवरण के लिए यहां देखें


0

अधिकांश लोग जो मारबीडीबी या माईएसक्यूएल से अधिक परिचित हैं, उनके लिए यह थोड़ा भ्रामक लगता है क्योंकि मारियाबीडी या माईएसक्यूएल में उनके अलग-अलग स्कीमा हैं (जिसमें अलग-अलग तालिकाएँ, दृश्य, पीएलएसडी ब्लॉक और डीबी ऑब्जेक्ट्स आदि शामिल हैं) और USERS वे खाते हैं जो उन तक पहुँच सकते हैं स्कीमा। इसलिए कोई विशिष्ट उपयोगकर्ता किसी विशेष स्कीमा से संबंधित नहीं हो सकता है। अनुमति उस स्कीमा को दी जाती है, तब उपयोगकर्ता उस तक पहुंच सकता है। उपयोगकर्ता और स्कीमा MySQL और MariaDB जैसे डेटाबेस में अलग हो गए हैं।

ओरेकल स्कीमा में और उपयोगकर्ताओं को लगभग समान माना जाता है। उस स्कीमा के साथ काम करने के लिए आपको अनुमति की आवश्यकता होती है, जहां आपको लगेगा कि स्कीमा नाम उपयोगकर्ता नाम के अलावा और कुछ नहीं है। अलग-अलग डेटाबेस ऑब्जेक्ट को अलग-अलग स्कीमा से एक्सेस करने के लिए स्कीमा में अनुमतियाँ दी जा सकती हैं। ओरेकल में हम कह सकते हैं कि एक उपयोगकर्ता एक स्कीमा का मालिक है क्योंकि जब आप एक उपयोगकर्ता बनाते हैं तो आप इसके लिए डीबी ऑब्जेक्ट बनाते हैं और इसके विपरीत।


-1

स्कीमा वस्तुओं का एक कंटेनर है। यह एक उपयोगकर्ता के स्वामित्व में है।


1
इसका मतलब है कि एक उपयोगकर्ता कई स्कीमाओं का मालिक हो सकता है। मुझे विश्वास नहीं होता कि यह (ओरेकल में) संभव है; हालांकि उपयोगकर्ता के Aपास स्कीमा पर पूर्ण व्यवस्थापक अधिकार हो सकते हैं B, बाद वाला हमेशा उपयोगकर्ता के स्वामित्व में रहेगा B, भले ही कोई भी इस तरह के उपयोगकर्ता नाम के साथ लॉग इन न करे।

-1

ठीक है, मैंने कहीं पढ़ा है कि यदि आपके डेटाबेस उपयोगकर्ता के पास डीडीएल विशेषाधिकार है तो यह एक स्कीमा है, अन्यथा यह एक उपयोगकर्ता है।


यह वास्तव में एक उपयोगी अंतर है - क्रिएट प्राइवेट वाले उपयोगकर्ताओं के रूप में उन लोगों से अलग है जिनके पास कोई क्रिएट नहीं है
एंड्रयू वुल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.