इस लेख में, हम MySQL 8 संबंधित विशेषाधिकार प्रणाली में नई सुविधा के बारे में बात करने जा रहे हैं, जो कि भूमिकाएं हैं। तो चलिए भूमिकाओं के बारे में बात करते हैं, यह लेख पूरी तरह से भूमिकाओं के लिए समर्पित है।
अन्य उपयोगकर्ताओं के पास जटिल विशेषाधिकार हो सकते हैं, इसका एक सामान्य उदाहरण रिपोर्ट करने के लिए उपयोग किया जाने वाला उपयोगकर्ता है, इस उपयोगकर्ता को कोई डेटा लिखने की आवश्यकता नहीं है, लेकिन यह भी संभावना है कि इसे सभी डेटा को पढ़ने की आवश्यकता नहीं है। यह बहुत संभव है कि इसका उपयोग केवल कुछ विशिष्ट तालिकाओं या स्तंभों के लिए किया जा सकता है, या इसके पास केवल विशिष्ट दृश्यों के सेट तक पहुंच का चयन हो सकता है।
ये विशेषाधिकार जल्दी से जुड़ सकते हैं और बहुत लंबी उपयोगकर्ता परिभाषाओं में समाप्त हो सकते हैं, हम एक परिभाषा का उपयोग नहीं करेंगे, और अधिक अनुदान अधिक गलतियों के लिए जगह बना रहे हैं। MySQL 8 में इन विशेषाधिकार सेटों को भूमिकाओं के रूप में परिभाषित किया जा सकता है और मूल MySQL विशेषाधिकारों के बजाय उपयोगकर्ताओं को भूमिकाएँ दी जा सकती हैं। भूमिकाएं उन विशेषाधिकारों का संग्रह हैं जो हम उपयोगकर्ताओं को देते हैं।
क्रिएट यूजर कमांड के साथ बनाए गए एक नए यूजर की तरह ही हम नीचे बताए अनुसार एक भूमिका बनाने के लिए उपयोग करते हैं;
क्रिएट रोल 'रिपोर्टरोल';
आप नीचे दी गई क्वेरी की तरह एक ही बार में कई भूमिकाएँ बना सकते हैं।
क्रिएट रोल 'app_ro', 'app_w', 'app_dev';
क्रिएट रोल कमांड के साथ बनाई गई नई भूमिका में इससे जुड़े कोई विशेषाधिकार नहीं होंगे, इस भूमिका को अनुमति दी जा सकती है क्योंकि यह एक सामान्य उपयोगकर्ता था।
नीचे दिए गए उदाहरण में, हम ऊपर बनाई गई भूमिका की रिपोर्ट करने के लिए कंपनी डेटाबेस में सभी तालिकाओं पर चुनिंदा विशेषाधिकार प्रदान करते हैं।
कंपनी पर चयन अनुदान।* पुन:नियंत्रण के लिए;
तारक (*) कंपनी डेटाबेस के अंदर सभी तालिकाओं का प्रतिनिधित्व करता है।
MySQL उपयोगकर्ताओं को भूमिकाएँ दी जा सकती हैं, नीचे दिए गए उदाहरण में, हम लोकलहोस्ट उपयोगकर्ता पर 'company_ro' बना रहे हैं।
उपयोगकर्ता बनाएं यदि मौजूद नहीं है तो 'company_ro'@'localhost' को mysql_native_password के साथ 'company_pass' द्वारा MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100 के साथ पहचाना जाता है;
याद रखें कि उपयोगकर्ता केवल एक उपयोगकर्ता नाम नहीं है, बल्कि MySQL में होस्ट पर इसका उपयोगकर्ता है और फिर उपयोगकर्ता को अनुदान रिपोट्रोल के साथ रेपोट्रोल भूमिका दी जा सकती है जैसा कि नीचे दिखाया गया है।
'company_ro'@'localhost' को 'repotrole' प्रदान करें;
MySQL का वर्तमान रोल फ़ंक्शन यह निर्धारित करने में मदद करता है कि वर्तमान उपयोगकर्ता की क्या भूमिका है।
mysql> current_role ();+----------------+| . चुनें current_role() |+----------------+| कोई नहीं |+----------------+
भूमिका के विशेषाधिकार स्टैक अप का अर्थ है कि उपयोगकर्ताओं के पास संघ द्वारा वर्णित मूल विशेषाधिकारों और इसकी भूमिकाओं के विशेषाधिकार होंगे। यह बहुत महत्वपूर्ण है कि यदि उपयोगकर्ता को भूमिका दी जाती है तो वह डिफ़ॉल्ट रूप से सक्रिय नहीं होता है। हम इसे बाद में इस खंड के अंत में देखेंगे।
अनिवार्य भूमिकाओं को परिभाषित करना
अनिवार्य भूमिकाएं वे भूमिकाएं होती हैं जो सभी उपयोगकर्ताओं द्वारा डिफ़ॉल्ट रूप से संबद्ध की जाएंगी और अनिवार्य चर द्वारा नियंत्रित की जाती हैं।
PERSIST अनिवार्य_रोल्स सेट करें ='role1, role2′;
mysql> SET PERSIST अनिवार्य_रोल्स='dbt3_read23';
अनिवार्य भूमिकाएं, जैसे स्पष्ट रूप से दी गई भूमिकाएं, सक्रिय होने तक प्रभावी नहीं होती हैं, आप देखेंगे कि इस पोस्ट में बाद में कैसे सक्रिय भूमिका निभाई जाए।
भूमिकाओं का अभ्यास करें
आइए इसे व्यावहारिक रूप से करें, हम एक भूमिका बनाते हैं और इसे कई उपयोगकर्ताओं को सौंपते हैं, हम कंपनी डेटाबेस पर सभी तालिकाओं पर विशेषाधिकार जोड़ देंगे और हम नीचे दिखाए गए अनुसार sys तालिका पर एक और चुनिंदा विशेषाधिकार जोड़ देंगे।
mysql> भूमिका 'repotrole' बनाएं;
इसलिए रिपोर्टिंग उपयोगकर्ता को विशेषाधिकार प्रदान करें।
mysql> कंपनी पर अनुदान चयन करें।* 'repotrole' के लिए;mysql> sys.version पर 'repotrole' पर चयन करें;
आइए उपयोगकर्ताओं के लिए बनाएं, उपयोगकर्ता1 लोकलहोस्ट पर और उपयोगकर्ता2 लोकलहोस्ट पर अलग-अलग पासवर्ड के साथ
mysql> 'foo' द्वारा पहचाना गया उपयोगकर्ता 'user1'@'localhost' बनाएं;mysql> 'बार' द्वारा पहचाने गए उपयोगकर्ता 'user2'@'localhost' बनाएं;mysql> 'user1'@'localhost को 'repotrole' प्रदान करें ';mysql> 'user2'@'localhost' को 'repotrole' प्रदान करें;
वे बनाए जाते हैं, उन्हें रेपोट्रोल भूमिका सौंपते हैं, और फिर शो ग्रांट के साथ जांचते हैं कि क्या उनकी रेपोट्रोल भूमिका है।
mysql> 'user1'@'localhost' के लिए अनुदान दिखाएं;+------------------------------------- -------------+| [email protected] के लिए अनुदान -----+| *.* को `user1`@`localhost` || . पर उपयोग प्रदान करें `यूजर1`@`लोकलहोस्ट` को `रिपोट्रोल`@`%` अनुदान दें|+-------------------------------- --------------+mysql> 'user2'@'localhost' के लिए अनुदान दिखाएं;+--------------------- ------------------------+| [email protected] के लिए अनुदान -----+| *.* को `user2`@`localhost` || . पर उपयोग प्रदान करें `यूजर2`@`लोकलहोस्ट` को `रिपोट्रोल`@`%` अनुदान दें|+-------------------------------- --------------+
वे ऐसा दोनों उपयोगकर्ताओं के लिए दोनों विशेषाधिकारों को स्पष्ट करने के बजाय करते हैं, हमने अभी-अभी रेपोट्रोल भूमिका बनाई है और उस भूमिका ने हमारे द्वारा बनाए गए दोनों नए उपयोगकर्ताओं के लिए दोनों विशेषाधिकार जोड़े हैं।
पीटी-शो-अनुदान के साथ भी उपयोगकर्ताओं की जाँच करें।
उपयोगकर्ता1
[[email protected] ~]# pt-show-grants | grep user1-- 'dbt3_user1'@'%' के लिए अनुदान, यदि मौजूद नहीं है तो 'dbt3_user1'@'%'; वैकल्पिक उपयोगकर्ता 'dbt3_user1'@'%' को 'mysql_native_password' के रूप में पहचाना गया'*2470C0C06DEE42FD2EXPIREDEF197A खाता अनलॉक पासवर्ड इतिहास डिफ़ॉल्ट पासवर्ड का पुन:उपयोग अंतराल डिफ़ॉल्ट पासवर्ड के लिए वर्तमान डिफ़ॉल्ट की आवश्यकता है; * पर उपयोग अनुदान दें। 'उपयोगकर्ता 1' @ 'लोकलहोस्ट' उपयोगकर्ता बनाएं यदि मौजूद नहीं है तो 'उपयोगकर्ता 1' @ 'लोकलहोस्ट'; उपयोगकर्ता 'उपयोगकर्ता 1' @ 'लोकलहोस्ट' को 'mysql_native_password' के रूप में पहचाना जाता है '* F3A2A51A9B0F2BE2468926B41LTI इंटरवल डिफॉल्ट पासवर्ड का पुन:उपयोग करने के लिए वर्तमान डिफ़ॉल्ट की आवश्यकता है; * पर उपयोग अनुदान दें।उपयोगकर्ता2
[[email protected] ~]# pt-show-grants | grep user2-- 'dbt3_user2'@'%' के लिए अनुदान, यदि मौजूद नहीं है तो 'dbt3_user2'@'%'; वैकल्पिक उपयोगकर्ता 'dbt3_user2'@'%' 'mysql_native_password' के साथ पहचाने गए '*2470C0C06DEE42FD_1618BB`DEF'*2470C0C06DEE42FD_1618BB` @`%` को किसी भी पासवर्ड की आवश्यकता नहीं है, डिफ़ॉल्ट खाता अनलॉक पासवर्ड इतिहास डिफ़ॉल्ट पासवर्ड का पुन:उपयोग करें, वर्तमान डिफ़ॉल्ट पासवर्ड की आवश्यकता है; * पर उपयोग प्रदान करें *। उपयोगकर्ता यदि 'user2'@'localhost' मौजूद नहीं है;उपयोगकर्ता 'user2'@'localhost' को 'mysql_native_password' के रूप में पहचाना जाता है '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB' के रूप में किसी भी पासवर्ड की आवश्यकता नहीं है। *.* को `user2`@`localhost` पर अनुदान दें;`user2`@`localhost` को `repotrole`@`%` प्रदान करें;इसलिए पीटी-शो-अनुदान दोनों उपयोगकर्ताओं के लिए रेपोट्रोल भूमिका दिखाते हैं।
यदि आप पीटी-शो-अनुदान का उपयोग करना सीखना चाहते हैं तो नीचे दिए गए लिंक का उपयोग करें
Centos 7 पर Percona टूलकिट स्थापित करें और उसका उपयोग करें
आइए MySQL क्लाइंट को फिर से शुरू करें और इस बार comp1 उपयोगकर्ता को रेपोट्रोल भूमिका प्रदान करें।
mysql> 'comp1'@'localhost' को 'repotrole' अनुदान दें;आइए MySQL क्लाइंट और Logan comp1 उपयोगकर्ता से बाहर निकलें, बस कमांड लाइन पर उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट करें।
उत्पादन प्रणालियों पर कमांड लाइन पर पासवर्ड निर्दिष्ट करना एक अच्छा विचार नहीं है क्योंकि यह इतिहास में दर्ज किया जाएगा। आइए शो अनुदान के साथ अनुमतियों की जांच करें।
mysql> अनुदान दिखाएं;+----------------------------------------------- -----------------------+| [email protected] के लिए अनुदान -----------------------+| *.* पर 'comp1`@`localhost` || अनुदान `dbt3_read23`@`%`,`repotrole`@`%` को `comp1`@`localhost` |तो उपयोगकर्ता की रेपोट्रोल भूमिका है लेकिन इसके विशेषाधिकार अभी तक सक्रिय नहीं हैं। आप देख सकते हैं कि 'dbt3_read23' भूमिका पहले से मौजूद है क्योंकि इस भूमिका को PERSIST अनिवार्य_भूमिकाएं के रूप में सेट किया गया है , जब आप एक नया उपयोगकर्ता बनाते हैं तो यह भूमिका स्वचालित रूप से असाइन की जाएगी।
सक्रिय भूमिकाएं
हम भूमिका को सक्रिय करने के लिए सेट रोल रेपोट्रोल का उपयोग कर सकते हैं और फिर हम शो ग्रांट की जांच कर सकते हैं।
mysql> सेट भूमिका 'repotrole';क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.00 सेकंड)mysql> अनुदान दिखाएं;+-------------------------- ----------------------------------------+| [email protected] के लिए अनुदान -----------------------+| *.* पर उपयोग प्रदान करें `comp1`@`localhost` || `कंपनी` पर अनुदान चयन करें।* `comp1`@`localhost` || `sys`.`संस्करण` से `comp1`@`लोकलहोस्ट` पर चयन अनुदान अनुदान `dbt3_read23`@`%`,`repotrole`@`%` को `comp1`@`localhost` |+-------------------------- ----------------------------------------+आप देख सकते हैं कि COMP1 उपयोगकर्ता के पास पहले से ही सभी कंपनी तालिकाओं के लिए विशेषाधिकार थे, यही कारण है कि हमने इस उपयोगकर्ता को इस अभ्यास के लिए भूमिका प्रदान की है लेकिन रिपोट्रोल भूमिका सिस्टम संस्करण तालिका में नया विशेषाधिकार जोड़ देगी।
हम डिफ़ॉल्ट भूमिका पर वापस सेट कर सकते हैं और विशेषाधिकारों की फिर से जांच कर सकते हैं।
mysql> कोई भूमिका नहीं सेट करें;क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित हैं (0.00 सेकंड)mysql> अनुदान दिखाएं;+-------------------------- ---------------------------------------+| [email protected] के लिए अनुदान -----------------------+| *.* पर उपयोग प्रदान करें `comp1`@`localhost` || अनुदान `dbt3_read23`@`%`,`repotrole`@`%` को `comp1`@`localhost` |+-------------------------- ----------------------------------------+इस बार यूजर ने . रखा dbt3_read23 भूमिका है क्योंकि यह मूल विशेषाधिकार के रूप में था लेकिन अब उस संस्करण को sys.version तालिका का विशेषाधिकार नहीं होगा क्योंकि वह भूमिका से आया था।