परिचय
PostgreSQL डेटाबेस क्लस्टर के भीतर प्रमाणीकरण, प्राधिकरण और ऑब्जेक्ट स्वामित्व को लागू करने के लिए विभिन्न तंत्रों का उपयोग करता है। इनमें से मूल भूमिकाओं की अवधारणा है।
PostgreSQL भूमिकाएँ उपयोगकर्ताओं और समूहों के विचारों का एक एकल, लचीली इकाई में संयोजन हैं। वे वह व्यक्तित्व हैं जिसे उपयोगकर्ता डेटाबेस सिस्टम के भीतर अपनाते हैं, वे इकाई हैं जिसके द्वारा प्रमाणीकरण प्रणाली कनेक्शन स्वीकार या अस्वीकार करती है, और सभी क्षेत्रों के विशेषाधिकार प्रबंधन नियमों का विषय है।
यह मार्गदर्शिका कवर करेगी कि PostgreSQL डेटाबेस क्लस्टर में कौन सी भूमिकाएँ हैं और उन्हें कैसे प्रबंधित किया जाए। अधिक विशेष रूप से, यह मार्गदर्शिका भूमिका प्रबंधन को कवर करेगी क्योंकि यह भूमिका विशेषताओं से संबंधित है। इस बारे में अधिक विस्तृत अवलोकन के लिए कि भूमिकाएँ बड़ी तस्वीर में कैसे फिट होती हैं, प्रमाणीकरण और प्राधिकरण मार्गदर्शिका के परिचय पर एक नज़र डालें। विशिष्ट डेटाबेस ऑब्जेक्ट पर भूमिका विशेषाधिकारों को बदलने का तरीका जानने के लिए, भूमिका अनुदान पर हमारी मार्गदर्शिका देखें।
भूमिकाएं क्या हैं?
PostgreSQL में, भूमिका क्षमताओं, अनुमतियों और "स्वामित्व वाली" संस्थाओं के एक विशिष्ट सेट का समूह है। "उपयोगकर्ताओं" और "समूहों" की अलग-अलग अवधारणाएं रखने के बजाय, PostgreSQL इन दोनों विचारों का प्रतिनिधित्व करने के लिए भूमिकाओं का उपयोग करता है। एक भूमिका वास्तविक दुनिया में एक व्यक्ति के अनुरूप हो सकती है, या यह एक ऐसे समूह के रूप में काम कर सकती है जिसके पास निश्चित पहुंच है कि अन्य भूमिकाएं सदस्य बन सकती हैं।
भूमिकाएँ PostgreSQL के भीतर लंगर बिंदु हैं जो यह निर्धारित करती हैं कि प्रमाणीकरण और प्राधिकरण नीतियां किस पर लागू होती हैं। कोई भी नीति जो सार्वभौमिक रूप से लागू नहीं होती है, उसे परिभाषित करने के लिए पहचान की धारणा की आवश्यकता होती है कि किसे प्रतिबंधित करना है और किसे अनुमति देना है। PostgreSQL में, इस पहचान को भूमिकाओं द्वारा दर्शाया जाता है।
PostgreSQL की प्रमाणीकरण प्रणाली में कई अलग-अलग घटक हैं, जिनमें से प्रत्येक भूमिकाओं से बंधे हैं। डेटाबेस क्लस्टर के प्रारंभिक कनेक्शन के लिए उपयोग करने के लिए, भूमिकाओं में पहले LOGIN
होना चाहिए विशेषता सेट। प्रमाणीकरण नियम स्वयं pg_hba.conf
नामक होस्ट-आधारित कॉन्फ़िगरेशन फ़ाइल में परिभाषित होते हैं . प्रत्येक नियम प्रमाणीकरण के तरीकों को परिभाषित करता है जिन्हें व्यक्तिगत भूमिका के दायरे में लाया जा सकता है। पासवर्ड प्रमाणीकरण के लिए कॉन्फ़िगर की गई भूमिकाओं के लिए पासवर्ड विशेषता सेट होना चाहिए ताकि सिस्टम प्रदान किए गए उपयोगकर्ता पासवर्ड को मान्य कर सके।
प्राधिकरण के संदर्भ में, भूमिकाओं को डेटाबेस क्लस्टर स्तर पर परिभाषित किया जाता है, जिसका अर्थ है कि PostgreSQL में, वे डेटाबेस के बीच साझा किए जाते हैं। चूंकि भूमिकाएं डेटाबेस तक फैली हुई हैं, प्राधिकरण प्रणाली प्रत्येक डेटाबेस इकाई के लिए प्रत्येक भूमिका की पहुंच के स्तर को नियंत्रित करती है। चूंकि भूमिकाएं लोगों के समूहों का प्रतिनिधित्व कर सकती हैं, इसलिए एक्सेस को कैसे कॉन्फ़िगर किया जा सकता है, इसमें काफी लचीलापन है।
PostgreSQL के भीतर वस्तु स्वामित्व की अवधारणा के लिए भूमिकाएँ भी आवश्यक हैं। उदाहरण के लिए, प्रत्येक डेटाबेस और तालिका में स्वामी के रूप में ठीक एक भूमिका कॉन्फ़िगर की गई है। superusers
के अलावा अन्य , केवल स्वामी की भूमिका ही वास्तविक वस्तु को संशोधित या हटा सकती है।
संक्षेप में, भूमिकाएँ अधिकांश व्यावहारिक डेटाबेस संचालन के मूल में हैं। उनका लचीलापन उन्हें उपयोगकर्ता पहचानकर्ता और उपयोगकर्ता वर्ग दोनों के रूप में कार्य करने की अनुमति देता है। डेटाबेस क्लस्टर के भीतर प्रत्येक क्रिया को भूमिका के विशेषाधिकारों के विरुद्ध जाँचा जाता है और डेटाबेस क्लस्टर के प्रत्येक कनेक्शन की सफलता उस भूमिका द्वारा निर्धारित की जाती है जिसे वह प्रमाणित करता है। इतने सारे मुख्य कार्यों में इसके महत्व के कारण भूमिका प्रबंधन पर एक अच्छा नियंत्रण प्राप्त करना महत्वपूर्ण है।
भूमिका विशेषताएँ
भूमिका विशेषताएँ भूमिका पर ही फ़्लैग होती हैं जो डेटाबेस क्लस्टर स्तर पर इसके कुछ मुख्य विशेषाधिकारों को निर्धारित करती हैं। इन्हें तब सेट किया जा सकता है जब भूमिका शुरू में बनाई गई हो, या किसी भी समय उपयुक्त विशेषताओं के साथ किसी भी भूमिका द्वारा बदली गई हो (SUPERUSER
या CREATEROLE
इस मामले में)।
भूमिका पर लागू की जा सकने वाली विशेषताओं में शामिल हैं:
LOGIN
:इस भूमिका का उपयोग करके उपयोगकर्ताओं को प्रारंभ में डेटाबेस क्लस्टर से कनेक्ट करने की अनुमति देता है।CREATE USER
कमांड स्वचालित रूप से इस विशेषता को जोड़ता है, जबकिCREATE ROLE
आदेश नहीं है।SUPERUSER
:भूमिका को लॉग इन करने के अधिकार को छोड़कर सभी अनुमति जांचों को बायपास करने की अनुमति देता है। केवल अन्यSUPERUSER
भूमिकाएँ इस विशेषता के साथ भूमिकाएँ बना सकती हैं।CREATEDB
:भूमिका को नए डेटाबेस बनाने की अनुमति देता है।CREATEROLE
:भूमिका को अन्य भूमिकाएँ बनाने, बदलने और हटाने की अनुमति देता है। यह विशेषता भूमिका को भूमिका सदस्यता असाइन करने या बदलने की भी अनुमति देती है। एक अपवाद यह है किCREATEROLE
. के साथ एक भूमिका विशेषताSUPERUSER
को बदल नहीं सकतीSUPERUSER
. के बिना भी भूमिकाएं विशेषता।REPLICATION
:भूमिका को स्ट्रीमिंग प्रतिकृति आरंभ करने की अनुमति देता है। इस विशेषता वाली भूमिकाओं मेंLOGIN
भी होना चाहिए विशेषता।PASSWORD
:भूमिका के लिए एक पासवर्ड असाइन करता है जिसका उपयोगPASSWORD
. के साथ किया जाएगा याmd5
प्रमाणीकरण तंत्र। यह विशेषता उद्धरण में पासवर्ड को विशेषता कीवर्ड के ठीक बाद तर्क के रूप में लेती है।INHERIT
:यह निर्धारित करता है कि क्या भूमिका को उन भूमिकाओं के विशेषाधिकार प्राप्त होते हैं जिनका वह सदस्य है।INHERIT
के बिना , सदस्यों कोSET ROLE
. का उपयोग करना चाहिए उन विशेष विशेषाधिकारों तक पहुँचने के लिए दूसरी भूमिका में बदलने के लिए। यह विशेषता डिफ़ॉल्ट रूप से नई भूमिकाओं के लिए निर्धारित है।
आप भूमिका विशेषताओं के बारे में अधिक जानकारी प्राप्त कर सकते हैं भूमिका विशेषताओं पर PostgreSQL के दस्तावेज़ीकरण और CREATE ROLE
की जाँच करके। आदेश।
superuser
क्या है भूमिका?
जैसा कि ऊपर संक्षेप में बताया गया है, एक विशेष विशेषाधिकार जिसे superuser
. कहा जाता है डेटाबेस क्लस्टर के लिए अप्रतिबंधित प्रशासनिक पहुँच की अनुमति देता है। यह root
. के समान है लिनक्स और यूनिक्स जैसे ऑपरेटिंग सिस्टम में खाता, लेकिन डेटाबेस स्तर पर।
superuser
. के साथ हमेशा कम से कम एक भूमिका होनी चाहिए प्रत्येक डेटाबेस क्लस्टर में विशेषाधिकार। प्रारंभिक superuser
स्थापना प्रक्रिया के दौरान खाता बनाया जाता है। आरंभिक SUPERUSER
. का नाम स्थापना प्रक्रिया के आधार पर खाता भिन्न हो सकता है, लेकिन अधिकतर, इस खाते को postgres
. कहा जाता है ।
superuser
. वाले खाते का उपयोग करके अपने दैनिक कार्य करने की अनुशंसा नहीं की जाती है विनाशकारी कार्रवाइयों के लिए इसकी क्षमता और व्यापक पहुंच वाले खाते से समझौता करने की संभावना को कम करने के कारण दोनों विशेषाधिकार। इसके बजाय, अधिकांश समय, उपयोगकर्ताओं को उन विशिष्ट कार्यों या डेटा ऑब्जेक्ट्स के लिए समर्पित खातों का उपयोग करना चाहिए, जिनके साथ वे काम कर रहे हैं, केवल superuser
का उपयोग कर रहे हैं। अधिक शक्तिशाली पहुंच की आवश्यकता होने पर खाते।
मौजूदा भूमिका विशेषताओं की जांच करना
अब जब आपको इस बात का व्यापक अंदाजा हो गया है कि भूमिका विशेषताएँ क्या हैं और वे किस प्रकार के विशेषाधिकारों की अनुमति देते हैं, तो आपको सीखना चाहिए कि PostgreSQL में भूमिकाओं पर लागू विशेषताओं को कैसे खोजा जाए। सामान्य रूप से भूमिकाओं पर और विशेष रूप से आपकी अपनी वर्तमान भूमिका पर निर्धारित विशेषताओं को खोजने में आपकी सहायता करने के लिए यह अनुभाग आपको कुछ आदेश दिखाएगा।
सभी डेटाबेस भूमिकाओं और उनकी विशेषताओं को सूचीबद्ध करना
पूरे सिस्टम में भूमिकाओं पर लागू विशेषताओं की जांच करने के कुछ अलग तरीके हैं।
यदि आप psql
. का उपयोग कर रहे हैं कमांड लाइन क्लाइंट, आप कुछ उपयोगी मेटा-कमांड का लाभ उठा सकते हैं जो आपको बिना किसी प्रश्न के भूमिका विशेषता जानकारी प्राप्त करने की अनुमति देते हैं।
\du
मेटा-कमांड सभी भूमिकाओं और उनकी विशेषताओं को दिखाता है:
\du
List of roles Role name | Attributes | Member of-----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
इस मामले में, postgres
भूमिका डिफ़ॉल्ट भूमिका है superuser
. के साथ इस डेटाबेस क्लस्टर के लिए कॉन्फ़िगर किए गए विशेषाधिकार।
भूमिकाओं को सूचीबद्ध करने के लिए समतुल्य SQL (-E
. पास करके खोजा जा सकता है या --echo-hidden
psql
starting प्रारंभ करते समय ध्वजांकित करें ) है:
SELECT r.rolname, r.rolsuper, r.rolinherit, r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, r.rolconnlimit, r.rolvaliduntil, ARRAY(SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as memberof, r.rolreplication, r.rolbypassrlsFROM pg_catalog.pg_roles rWHERE r.rolname !~ '^pg_'ORDER BY 1;
एक समान क्वेरी जो भूमिका विशेषता जानकारी प्रदान करती है (भूमिका सदस्यता घटक के बिना) नीचे है। हम psql
. का उपयोग करते हैं मेटा-कमांड \x on
यहां बेहतर पठनीयता के लिए परिणामों को लंबवत रूप से आउटपुट करने के लिए:
-- turn on vertical display\x onSELECT * FROM pg_roles WHERE rolname !~ '^pg_';-- turn off vertical display\x off
-[ RECORD 1 ]--+---------rolname | postgresrolsuper | trolinherit | trolcreaterole | trolcreatedb | trolcanlogin | trolreplication | trolconnlimit | -1rolpassword | ********rolvaliduntil | rolbypassrls | trolconfig | oid | 10
यदि आप केवल यह देखने में रुचि रखते हैं कि superuser
. किन भूमिकाओं में हैं विशेषता, आप स्पष्ट रूप से एक सूची के लिए पूछ सकते हैं:
SELECT rolname FROM pg_roles WHERE rolsuper;
rolname---------- postgres(1 row)
वैकल्पिक रूप से, आप सभी उपयोगकर्ताओं और उनके superuser
. को सूचीबद्ध कर सकते हैं अधिक संपूर्ण चित्र के लिए स्थिति:
SELECT usename,usesuper FROM pg_user;
usename | usesuper----------+---------- postgres | t user1 | f(2 rows)
इसके बजाय इसके (कभी-कभी अस्पष्ट) "उपयोगकर्ता" ओवरले के बजाय PostgreSQL के "भूमिका" प्रतिमान का उपयोग करके समान जानकारी प्राप्त की जा सकती है, इसके बजाय इस थोड़ी लंबी क्वेरी के साथ:
SELECT rolname,rolsuper FROM pg_roles WHERE rolname !~ '^pg_';
rolname | rolsuper----------+---------- postgres | t user1 | f(2 rows)
अपनी खुद की विशेषताओं को सूचीबद्ध करना
यदि आप वर्तमान में उपयोग की जा रही भूमिका की विशेषताओं को खोजना चाहते हैं, तो आप आउटपुट को आसानी से फ़िल्टर कर सकते हैं।
psql
. का उपयोग करते समय मेटा-कमांड, आप USER
. का उपयोग कर सकते हैं चर, जिसे वर्तमान कनेक्टेड भूमिका के साथ प्रतिस्थापित किया जाएगा। psql
बृहदान्त्र का उपयोग करता है (:
) चरों को प्रक्षेपित करने के लिए:
\du :USER
List of roles Role name | Attributes | Member of-----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
सभी संभावित भूमिका विशेषताओं के मान दिखाने वाली सूची प्राप्त करने के लिए, आप भूमिका नाम की तुलना CURRENT_ROLE
द्वारा दिए गए मान से करते हुए एक क्वेरी का उपयोग कर सकते हैं पोस्टग्रेएसक्यूएल फ़ंक्शन। फिर से, हम पठनीयता के लिए लंबवत आउटपुट का उपयोग कर रहे हैं:
-- First, turn on vertical output\x onSELECT * FROM pg_roles WHERE rolename = CURRENT_ROLE;-- Change back to normal output\x off
-[ RECORD 1 ]--+---------rolname | postgresrolsuper | trolinherit | trolcreaterole | trolcreatedb | trolcanlogin | trolreplication | trolconnlimit | -1rolpassword | ********rolvaliduntil |rolbypassrls | trolconfig |oid | 10
यह जांचने के लिए कि आपकी वर्तमान भूमिका में superuser
है या नहीं विशेषाधिकार, आप टाइप कर सकते हैं:
SHOW is_superuser;
is_superuser-------------- on(1 row)
जांचें कि आपके पास भूमिका प्रबंधन विशेषाधिकार हैं या नहीं
भूमिकाएँ बनाने, बदलने या हटाने के लिए, आपके पास superuser
होना चाहिए या CREATEROLE
विशेषाधिकार।
यह जाँचने के लिए कि सिस्टम में किन भूमिकाओं में भूमिका प्रबंधन विशेषाधिकार हैं, टाइप करें:
SELECT rolname as "Users who can manage roles" FROM pg_roles WHERE rolsuper OR rolcreaterole;
Users who can manage roles---------------------------- postgres(1 rows)
यदि आप केवल यह जानना चाहते हैं कि आपकी वर्तमान भूमिका में भूमिका प्रबंधन विशेषाधिकार हैं या नहीं, तो आप इसके बजाय इसका उपयोग कर सकते हैं:
SELECT 'Yes' AS "Can I manage roles?" FROM pg_roles WHERE rolname = :'USER' AND (rolsuper OR rolcreaterole);
Can I manage roles?--------------------- Yes(1 row)
भूमिकाएं बनाना
एक बार जब आप यह सत्यापित कर लें कि आपके पास भूमिका प्रबंधन विशेषाधिकार हैं, तो आप PostgreSQL में भूमिकाएँ बनाना, संशोधित करना या हटाना शुरू कर सकते हैं।
भूमिका विशेषताएँ सेट करने का एक विकल्प यह है कि आप भूमिका बनाते समय उन्हें घोषित करें। यह आपको भूमिका के लिए प्रारंभिक शर्तें निर्धारित करने की अनुमति देता है, लेकिन यदि आप भूमिका के पहुंच के स्तर को बदलना चाहते हैं तो आप उन्हें बाद में भी संशोधित कर सकते हैं। आप CREATE ROLE
. के बारे में अधिक जानकारी प्राप्त कर सकते हैं कमांड जिसका उपयोग हम स्वयं को मूल सिंटैक्स से परिचित कराने के लिए करेंगे।
भूमिका बनाने का एक तरीका कमांड लाइन से है। PostgreSQL में एक createuser
शामिल है कमांड जो डेटाबेस क्लस्टर में LOGIN
. के साथ एक भूमिका बनाएगी विशेषाधिकार।
सामान्य वाक्य रचना है:
createuser <options> <rolename>
उदाहरण के लिए, admin
. नाम की भूमिका बनाने के लिए superuser
. के साथ पासवर्ड के लिए संकेत देते समय विशेषाधिकार, आप टाइप कर सकते हैं:
createuser --superuser admin
तब आप admin
. का उपयोग करके लॉग इन करने में सक्षम होंगे pg_hba.conf
. में उल्लिखित प्रमाणीकरण विधियों के अनुसार खाता फ़ाइल।
SQL
. का उपयोग करके भूमिकाएं बनाने के लिए , सामान्य सिंटैक्स इस तरह दिखता है:
CREATE ROLE <role>;
विशेषताओं को WITH
. का उपयोग करके भूमिका नाम के बाद निर्दिष्ट करके परिभाषित किया जा सकता है :
CREATE ROLE <role> WITH <options>;
उदाहरण के लिए, user1
. नाम की भूमिका बनाने के लिए जो पासवर्ड से लॉगिन कर सकता है secretpassword
, आप टाइप कर सकते हैं:
CREATE ROLE "user1" WITH LOGIN PASSWORD 'secretpassword';
इसके बजाय superuser
. के साथ एक भूमिका बनाने के लिए विशेषाधिकार (आपको superuser
भी होना चाहिए इस आदेश को सफलतापूर्वक निष्पादित करने के लिए) कि नहीं लॉगिन (उपयोगकर्ता को SET ROLE
. का उपयोग करना चाहिए इस भूमिका में बदलने के लिए), आप टाइप कर सकते हैं:
CREATE ROLE "user2" WITH SUPERUSER;
मौजूदा भूमिकाएं बदलना
मौजूदा भूमिकाओं की विशेषताओं को संशोधित करने के लिए, आप ALTER ROLE
. का उपयोग कर सकते हैं इसके बजाय आदेश। भूमिका निर्माण की तरह, आपकी वर्तमान भूमिका में भी superuser
होना चाहिए या CREATEROLE
विशेषाधिकार जिन उपयोगकर्ताओं के पास वे विशेषाधिकार नहीं हैं वे केवल ALTER ROLE
. का उपयोग कर सकते हैं अपना पासवर्ड बदलने का आदेश दें।
भूमिकाएँ बदलने से आप निर्माण के बाद किसी भूमिका को सौंपी गई विशेषताओं को बदल सकते हैं। भूमिका निर्माण अनुभाग में उल्लिखित समान विशेषताओं का उपयोग ALTER ROLE
. के साथ किया जा सकता है वाक्य - विन्यास। एक अंतर यह है कि प्रत्येक विशेषता प्रकार को NO
. जोड़कर नकारा जा सकता है उपसर्ग। उदाहरण के लिए, किसी भूमिका को डेटाबेस क्लस्टर में लॉगिन करने की अनुमति देने के लिए, आप उसे LOGIN
दे सकते हैं गुण। उस क्षमता को हटाने के लिए, आप NOLOGIN
. निर्दिष्ट करके भूमिका बदल देंगे ।
ALTER ROLE
कमांड केवल उन विशेषताओं को बदलता है जिनका स्पष्ट रूप से उल्लेख किया गया है। दूसरे शब्दों में, ALTER ROLE
आदेश परिवर्तन निर्दिष्ट करता है विशेषताओं के लिए, नई विशेषताओं का पूरा सेट नहीं।
user2
. को अनुमति देने के लिए डेटाबेस क्लस्टर में लॉगिन करने की भूमिका, आप टाइप कर सकते हैं:
ALTER ROLE "user2" WITH LOGIN;
ध्यान रखें कि यह लॉगिन करने की क्षमता को सक्षम बनाता है, फिर भी अनुमत प्रमाणीकरण विधियों को pg_hba.conf
द्वारा नियंत्रित किया जाता है। फ़ाइल।
अगर आप चाहते हैं user2
इसके बजाय लॉगिन करने, भूमिकाएँ बनाने और डेटाबेस बनाने में सक्षम होने के लिए, आप उन तीन विशेषताओं को निर्दिष्ट कर सकते हैं, जिन्हें रिक्त स्थान से अलग किया गया है:
ALTER ROLE "user2" WITH LOGIN CREATEROLE CREATEDB;
SUPERUSER
को निरस्त करने के लिए एक भूमिका से स्थिति (आप केवल एक अन्य superuser
. का उपयोग करके इस आदेश को निष्पादित कर सकते हैं भूमिका), टाइप करें:
ALTER ROLE "user2" WITH NOSUPERUSER;
किसी भूमिका के लिए पासवर्ड बदलने के लिए, आप निम्न टाइप कर सकते हैं (सभी भूमिकाएं इस कमांड को अपनी भूमिका पर निष्पादित करने में सक्षम होनी चाहिए, चाहे CREATEROLE
) या superuser
विशेषाधिकार):
ALTER ROLE <role> WITH PASSWORD '<password>';
यद्यपि उपरोक्त आदेश काम करता है, यदि संभव हो तो, psql
. का उपयोग करना एक बेहतर विचार है पासवर्ड बदलने के लिए मेटा-कमांड। psql
कमांड स्वचालित रूप से पासवर्ड के लिए संकेत देता है और सर्वर पर भेजने से पहले इसे एन्क्रिप्ट करता है। यह लॉग में संवेदनशील डेटा को लीक होने से बचाने में मदद करता है।
आप भूमिका का पासवर्ड psql
. से बदल सकते हैं निम्नलिखित टाइप करके
-- To change your own password\password-- To change the password for another role\password <role>
आप ALTER ROLE
. का भी उपयोग कर सकते हैं भूमिका का नाम बदलने का आदेश:
ALTER ROLE <role> RENAME TO <newrole>
ध्यान रखें कि आप अपनी वर्तमान सत्र भूमिका का नाम नहीं बदल सकते।
भूमिका हटाना
किसी मौजूदा भूमिका को हटाना पिछले आदेशों के समान पैटर्न का अनुसरण करता है। दोबारा, आपके पास CREATEROLE
होना चाहिए या superuser
इन आदेशों को निष्पादित करने के विशेषाधिकार।
एक जटिल कारक यह है कि भूमिकाएँ नहीं हटा दिया जाना चाहिए यदि वे अभी भी डेटाबेस के भीतर वस्तुओं द्वारा संदर्भित हैं। इसका मतलब है कि आपको भूमिका के स्वामित्व वाली किसी भी वस्तु का स्वामित्व हटाना या स्थानांतरित करना होगा। बाद में, आपको डेटाबेस ऑब्जेक्ट्स पर भूमिका के किसी भी अतिरिक्त विशेषाधिकार को भी रद्द करना होगा।
डेटाबेस एडमिनिस्ट्रेटर स्टैक एक्सचेंज साइट पर इरविन ब्रैंडस्टेटर द्वारा उचित रूप से पुन:असाइन और ड्रॉप विशेषाधिकारों का एक विस्तृत विवरण प्रदान किया गया है। नीचे इसी प्रक्रिया का उपयोग किया गया है।
सबसे पहले, आप REASSIGNED OWNED
का उपयोग करके भूमिका के सभी स्वामित्व वाले ऑब्जेक्ट को पुन:असाइन कर सकते हैं आज्ञा। उदाहरण के लिए, यदि आप user2
. को हटाने की तैयारी कर रहे हैं भूमिका, आप इसके ऑब्जेक्ट को postgres
. को असाइन कर सकते हैं टाइप करके भूमिका:
REASSIGN OWNED BY "user2" TO "postgres";
अब वस्तुओं का स्वामित्व postgres
. के पास है , हम DROP OWNED
. का उपयोग कर सकते हैं वस्तुओं पर हमें दिए गए अन्य सभी विशेषाधिकारों को रद्द करने का आदेश। यह आदेश हमारे स्वामित्व वाली किसी भी वस्तु को भी हटा देता है, लेकिन चूंकि हमने अभी उन्हें postgres
में स्थानांतरित कर दिया है भूमिका, user2
भूमिका में अब कोई स्वामित्व वाली वस्तु नहीं है। इस वजह से, कमांड केवल किसी भी भूमिका के अतिरिक्त विशेषाधिकारों को निरस्त करेगा:
DROP OWNED BY "user2";
बिना DROP OWNED
ऊपर दिए गए शॉर्टकट में, आपको REVOKE ALL PRIVILEGES
execute निष्पादित करना होगा प्रत्येक व्यक्तिगत वस्तु या वस्तु प्रकार पर जिस पर भूमिका के विशेषाधिकार हैं।
एक बार जब आप सभी संबद्ध विशेषाधिकारों को निरस्त कर देते हैं, तो आप टाइप करके भूमिका को हटा सकते हैं:
DROP ROLE "user2";
psql
का उपयोग करके लॉग इन करना
एक बार जब आप एक नई भूमिका कॉन्फ़िगर कर लेते हैं, और pg_hba.conf
का उपयोग करके प्रमाणीकरण विवरण कॉन्फ़िगर कर लेते हैं फ़ाइल, आप अपनी नई भूमिका का उपयोग करके डेटाबेस क्लस्टर में लॉगिन कर सकते हैं। psql
कमांड लाइन क्लाइंट ऐसा करने का एक आसान तरीका प्रदान करता है।
डिफ़ॉल्ट रूप से, psql
मान लें कि आप एक ऐसी भूमिका का उपयोग करके कनेक्ट करना चाहते हैं जो आपके ऑपरेटिंग सिस्टम उपयोगकर्ता नाम से मेल खाती हो। इसलिए यदि आप अपने कंप्यूटर में john
. के रूप में लॉग इन हैं , psql
मान लेंगे कि आप एक भूमिका का उपयोग करके डेटाबेस से कनेक्ट करने का प्रयास करना चाहते हैं जिसे john
भी कहा जाता है ।
इस व्यवहार को ओवरराइड करने के लिए, आप -U
. पास कर सकते हैं या --username=
विकल्प। उदाहरण के लिए, यदि आप kerry
. नामक भूमिका में लॉग इन करना चाहते हैं , आप टाइप कर सकते हैं:
psql -U kerry
psql
. की सफलता कमांड kerry
के अस्तित्व पर निर्भर करेगा भूमिका, उस सर्वर की पहुंच, जिससे आप कनेक्ट करने का प्रयास कर रहे हैं, और सर्वर पर परिभाषित प्रमाणीकरण नियम।
एक सत्र के दौरान किसी भिन्न भूमिका में बदलना
कभी-कभी, हो सकता है कि आप किसी अन्य भूमिका के विशेषाधिकार और पहचान को अस्थायी रूप से अपनाना चाहें, जिस तक आपकी पहुँच हो। उदाहरण के लिए, यह आवश्यक है यदि आप उस भूमिका के विशेषाधिकार प्राप्त करना चाहते हैं जिसके आप सदस्य हैं यदि आपकी वर्तमान भूमिका में INHERIT
नहीं है विशेषता।
यह कैसे काम करता है यह समझने के लिए, आपको सक्रिय भूमिकाओं को वर्गीकृत करने के लिए PostgreSQL द्वारा उपयोग की जाने वाली शब्दावली को जानना होगा:
- सत्र भूमिका :सत्र भूमिका वह भूमिका है जिसके साथ आपने PostgreSQL डेटाबेस क्लस्टर से अपने प्रारंभिक कनेक्शन के दौरान लॉग इन किया था। यह आपके प्रारंभिक विशेषाधिकारों को निर्धारित करता है और सिस्टम तक आपकी पहुंच को निर्धारित करता है। इस भूमिका में
LOGIN
होना चाहिए विशेषता। - वर्तमान भूमिका :इसके विपरीत, वर्तमान भूमिका वह भूमिका है जिसके रूप में आप वर्तमान में अभिनय कर रहे हैं। वर्तमान भूमिका से जुड़े विशेषाधिकार, चाहे सीधे सेट किए गए हों या अन्य भूमिकाओं से विरासत में मिले हों, उन कार्यों को निर्धारित करते हैं जिन्हें करने की आपको अनुमति है और जिन वस्तुओं तक आपकी पहुंच है।
आप अपना सत्र और वर्तमान भूमिका मान टाइप करके देख सकते हैं:
SELECT SESSION_USER, CURRENT_USER;
current_user | session_user--------------+-------------- postgres | postgres(1 row)
जबकि अपनी सत्र भूमिका को बदलने का एकमात्र तरीका एक अलग भूमिका का उपयोग करके एक नया कनेक्शन शुरू करना है, आप SET ROLE
का उपयोग करके अपनी वर्तमान भूमिका बदल सकते हैं। आज्ञा। SET ROLE
अस्थायी रूप से एक अलग भूमिका के रूप में कार्य करने के लिए कमांड का उपयोग किया जाता है। कमांड वैकल्पिक रूप से निम्नलिखित संशोधक भी लेता है:
SESSION
:डिफ़ॉल्ट सेटिंग। यहSET ROLE
. का कारण बनता है पूरे डेटाबेस सत्र को प्रभावित करने के लिए आदेश।LOCAL
:यह संशोधक कमांड को केवल वर्तमान लेनदेन के लिए भूमिका बदल देगा।
वर्तमान भूमिका को user2
. में बदलने के लिए भूमिका (शेष सत्र के लिए), टाइप करें:
SET ROLE "user2";
यदि आप अपने सत्र और वर्तमान भूमिका मूल्यों की जाँच करते हैं, तो आप देखेंगे कि वर्तमान भूमिका मान बदल गया है:
SELECT SESSION_USER, CURRENT_USER;
current_user | session_user--------------+-------------- user2 | postgres(1 row)
आपकी सभी कार्रवाइयां अब user2
. का उपयोग करेंगी उनके संदर्भ के रूप में भूमिका।
उस सत्र भूमिका में वापस जाने के लिए जिसका आप पहले उपयोग कर रहे थे, आप टाइप कर सकते हैं:
SET ROLE NONE;
एक विकल्प जो समान परिणाम प्राप्त करता है वह है:
RESET ROLE;
निष्कर्ष
PostgreSQL की भूमिकाओं, भूमिका विशेषताओं, अनुदान और प्रमाणीकरण की प्रणाली एक लचीली प्रणाली बनाती है जो प्रशासकों को अनुमतियों और डेटाबेस एक्सेस को प्रभावी ढंग से प्रबंधित करने की अनुमति देती है। इस गाइड ने वर्णन किया कि वास्तव में भूमिकाएँ क्या हैं और वे उपयोग के मामलों की एक विस्तृत श्रृंखला को कैसे शामिल करती हैं। इसमें भूमिकाओं को बनाने, संशोधित करने और हटाने और उनकी वैश्विक क्षमताओं को निर्धारित करने वाली भूमिका विशेषताओं को प्रबंधित करने का तरीका भी शामिल है। अपने डेटाबेस को सुरक्षित रखने और अपने वैध उपयोगकर्ताओं को उपयोगी पहुंच प्रदान करने के लिए इन पहचानों को प्रबंधित करने के तरीके को समझना आवश्यक है।