MySql: अनुदान केवल विकल्प पढ़ें?


97

मेरे पास एक उपयोगकर्ता है, जिसे मैं db स्कीमा पर सभी READ अनुमति देना चाहता हूं।

एक तरीका यह है:

GRANT SELECT, SHOW_VIEW  ON test.* TO 'readuser'@'%';

क्या ग्रांट में सभी रीड ऑपरेशंस को ग्रुप करने का एक तरीका है?


विशेषाधिकार है SHOW VIEW, नहीं SHOW_VIEW, लेकिन आपको उपयोगकर्ता को यह प्रदान करने की आवश्यकता नहीं है जब तक कि आप उन्हें SHOW CREATE VIEWविचारों पर सक्षम नहीं होना चाहते ... वे केवल SELECTविशेषाधिकार वाले विचारों से चयन कर सकते हैं । "समूह सभी अनुदान में संचालन पढ़ें" से आपका क्या मतलब है?
माइकल - sqlbot

यदि कोई एकल विशेषाधिकार है जो डेटाबेस पर सभी READ संचालन के लिए खड़ा है। मैं समझता हूं कि वे ठीक-ठाक पहुंच प्रदान कर रहे हैं, लेकिन एक सुविधाजनक उच्च स्तरीय अमूर्तता ने हमारी मदद की होगी।
अजीत गंगा

जवाबों:


161

यदि कोई एकल विशेषाधिकार है जो डेटाबेस पर सभी READ संचालन के लिए खड़ा है।

यह इस बात पर निर्भर करता है कि आप "सभी पढ़े गए" को कैसे परिभाषित करते हैं।

तालिकाओं और विचारों से "पढ़ना" SELECTविशेषाधिकार है। यदि आप "सभी पढ़े" से इसका मतलब है तो हाँ:

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

हालाँकि, ऐसा लगता है कि आपको हर चीज़ को "देखने", "स्पर्श नहीं करने" की क्षमता है। तो, यहाँ पढ़ने के अन्य प्रकार हैं जो दिमाग में आते हैं:

"पढ़ना" विचारों की परिभाषा SHOW VIEWविशेषाधिकार है।

"पढ़ना" अन्य उपयोगकर्ताओं द्वारा वर्तमान में निष्पादित प्रश्नों की सूची PROCESSविशेषाधिकार है।

वर्तमान प्रतिकृति स्थिति "पढ़ना" REPLICATION CLIENTविशेषाधिकार है।

ध्यान दें कि इनमें से कोई भी या सभी अधिक जानकारी को उजागर कर सकते हैं, जिसे आप उजागर करने का इरादा रखते हैं, जो प्रश्न में उपयोगकर्ता की प्रकृति पर निर्भर करता है।

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

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

हालांकि, कोई भी विशेषाधिकार नहीं है जो अन्य विशेषाधिकारों के कुछ सबसेट को अनुदान देता है, जो कि ऐसा लगता है जैसे आप पूछ रहे हैं।

यदि आप मैन्युअल रूप से काम कर रहे हैं और इसके बारे में जाने के लिए एक आसान तरीका तलाश कर रहे हैं, तो आपको आमतौर पर उपयोगकर्ता के एक निश्चित वर्ग के लिए किए गए सटीक अनुदान को याद रखने की आवश्यकता नहीं है, आप एक तुलनीय उपयोगकर्ता के अनुदान को पुन: प्राप्त करने के लिए कथन को देख सकते हैं, और इसे बदल सकते हैं समान विशेषाधिकार के साथ एक नया उपयोगकर्ता बनाने के लिए:

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

पासवर्ड के साथ नए उपयोगकर्ता को जोड़ने के लिए 'not_leet' और 'localhost' को बदलना, नए उपयोगकर्ता GRANTबनाने के लिए पुन: प्रयोज्य कथन का परिणाम देगा ।

यदि आप उपयोगकर्ताओं को विशेषाधिकारों के सीमित सेट को सेट करने और देने के लिए एक एकल ऑपरेशन चाहते हैं, और संभवत: किसी भी विशेषीकृत विशेषाधिकार को हटा दें, तो एक संग्रहीत कार्यविधि बनाकर किया जा सकता है जो सब कुछ जो आप करना चाहते हैं, को एन्क्रिप्ट करता है। प्रक्रिया के मुख्य भाग के भीतर, आप GRANTडायनेमिक SQL के साथ स्टेटमेंट का निर्माण करेंगे और / या सीधे अनुदान तालिकाओं को स्वयं जोड़ेंगे।

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


1
धन्यवाद। महान जवाब के अलावा मुझे आपका पासवर्ड भी पसंद आया। :)
अजित गंगा

2
वर्थ नोटिंग: प्रक्रिया और आवेदन पत्र "वैश्विक" विशेषाधिकार प्रकार हैं, इसलिए "प्रति डेटाबेस" बहिष्करण के साथ परिभाषित करने पर वाक्यविन्यास विफल हो जाएगा। Mydb पर अनुदान प्रक्रिया। * अमान्य होगा, लेकिन * * पर प्राप्त करने की प्रक्रिया ठीक होगी।
मधुमक्खी Kay

अनुदान db_name पर का चयन करें। * अनुदान विकल्प के साथ '' '%' के लिए;
मूसा

16
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';

यह SELECTदृश्य सहित सभी डेटाबेस के लिए विशेषाधिकार वाला एक उपयोगकर्ता बनाएगा ।


9

विभिन्न अनुमतियाँ जो आप किसी उपयोगकर्ता को दे सकते हैं

ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges

किसी विशिष्ट उपयोगकर्ता को अनुमति प्रदान करने के लिए, आप इस ढांचे का उपयोग कर सकते हैं:

GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;

मुझे यह लेख बहुत मददगार लगा


3

एक चरण-दर-चरण मार्गदर्शिका मुझे यहां मिली ।

MySQL के लिए केवल-पढ़ने के लिए डेटाबेस उपयोगकर्ता खाता बनाना

UNIX प्रॉम्प्ट पर, MySQL कमांड-लाइन प्रोग्राम चलाएं, और निम्न कमांड टाइप करके एक व्यवस्थापक के रूप में लॉग इन करें:

mysql -u root -p

रूट अकाउंट के लिए पासवर्ड टाइप करें। Mysql प्रॉम्प्ट पर, निम्न चरणों में से एक करें:

किसी भी होस्ट से उपयोगकर्ता को डेटाबेस तक पहुँच प्रदान करने के लिए, निम्न कमांड टाइप करें:

grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';

यदि कलेक्टर डेटाबेस के समान होस्ट पर स्थापित किया जाएगा, तो निम्न कमांड टाइप करें:

grant select on database_name.* to 'read-only_user_name' identified by 'password';

यह आदेश उपयोगकर्ता को केवल स्थानीय होस्ट से डेटाबेस तक केवल पढ़ने के लिए पहुँच प्रदान करता है। यदि आपको पता है कि होस्ट का होस्ट नाम या आईपी पता जिस पर कलेक्टर इंस्टॉल किया जाएगा, निम्न कमांड टाइप करें:

grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';

होस्ट नाम DNS या स्थानीय होस्ट फ़ाइल द्वारा resolvable होना चाहिए। Mysql प्रॉम्प्ट पर, निम्न कमांड टाइप करें:

flush privileges;

टाइप करें quit

निम्नलिखित उदाहरण कमांड और पुष्टिकरण संदेशों की एक सूची है:

mysql> grant select on dbname.* to 'readonlyuser'@'%' identified 
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit

3

यहां तक ​​कि उपयोगकर्ता को जवाब मिल गया है और @Michael - sqlbot ने अपने पोस्ट में ज्यादातर बिंदुओं को बहुत अच्छी तरह से कवर किया है, लेकिन एक बिंदु गायब है, इसलिए बस इसे कवर करने की कोशिश कर रहा है।

यदि आप एक साधारण उपयोगकर्ता को पढ़ने की अनुमति प्रदान करना चाहते हैं (व्यवस्थापक प्रकार नहीं) -

GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';

नोट: यहां EXECUTE की आवश्यकता है, ताकि उपयोगकर्ता डेटा को पढ़ सके यदि संग्रहित प्रक्रिया है जो एक रिपोर्ट का उत्पादन करती है (कुछ चुनिंदा कथन)।

लोकलहोस्ट को विशिष्ट आईपी से बदलें जिससे उपयोगकर्ता डीबी से कनेक्ट होगा।

अतिरिक्त पढ़ें अनुमतियाँ हैं-

  • शो व्यू: यदि आप व्यू स्कीमा दिखाना चाहते हैं।
  • उत्तर क्लीयर: यदि उपयोगकर्ता को प्रतिकृति / स्लेव स्टेटस की जांच करनी है। लेकिन सभी डीबी पर अनुमति देने की आवश्यकता है।
  • प्रक्रिया: यदि उपयोगकर्ता को चल रही प्रक्रिया की जांच करने की आवश्यकता है। सभी डीबी के साथ ही काम करेंगे।

0

यदि आप चाहते हैं कि पठन की अनुमति देने के बाद ही दृश्य को पढ़ा जाए तो आप DDL परिभाषा को देखते हुए ALGORITHM = TEMPTABLE का उपयोग कर सकते हैं।


0

MySQL 8 के लिए ध्यान दें यह अलग है

आपको इसे दो चरणों में करने की आवश्यकता है:

CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.