MySQL में नया उपयोगकर्ता बनाएँ और इसे एक डेटाबेस में पूर्ण पहुँच दें


628

मैं MySQL में एक नया उपयोगकर्ता बनाना चाहता हूं और इसे केवल एक डेटाबेस तक ही पूर्ण पहुंच प्रदान करता हूं dbTest, कहते हैं , कि मैं जैसे कमांड बनाता हूं create database dbTest;। ऐसा करने के लिए MySQL कमांड क्या होगा?

जवाबों:


829

उपयोगकर्ता बनाने के लिए यह प्रयास करें:

CREATE USER 'user'@'hostname';

इसे डेटाबेस तक पहुँच देने के लिए इसे आज़माएँ dbTest:

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

यदि आप एक ही मशीन पर MySQL तक पहुंचने वाले कोड / साइट को चला रहे हैं, तो होस्टनाम लोकलहोस्ट होगा।

अब, ब्रेक डाउन।

GRANT - यह कमांड बनाने के लिए इस्तेमाल किया जाता है और डेटाबेस, टेबल आदि के अधिकार प्रदान करता है।

ALL PRIVILEGES- यह बताता है कि उपयोगकर्ता के पास सभी मानक विशेषाधिकार होंगे। हालाँकि इसमें GRANT कमांड का उपयोग करने का विशेषाधिकार शामिल नहीं है।

dbtest.*- यह MySQL पूरे dbtest डेटाबेस में उपयोग के लिए इन अधिकारों को लागू करने का निर्देश देता है। यदि आप चाहें तो * को आप विशिष्ट तालिका नामों या स्टोर रूटीन से बदल सकते हैं।

TO 'user'@'hostname'- 'उपयोगकर्ता' आपके द्वारा बनाए जा रहे उपयोगकर्ता खाते का उपयोगकर्ता नाम है। नोट: आपके पास वहाँ एकल उद्धरण होना चाहिए। 'होस्टनाम' MySQL बताता है कि उपयोगकर्ता किस होस्ट से कनेक्ट कर सकता है। यदि आप केवल उसी मशीन से चाहते हैं, तो उपयोग करेंlocalhost

IDENTIFIED BY 'password' - जैसा कि आपने अनुमान लगाया होगा, यह उस उपयोगकर्ता के लिए पासवर्ड सेट करता है।


82
यदि आप नेटवर्क एक्सेस की अनुमति दे रहे हैं और किसी भी होस्ट से कनेक्शन चाहते हैं तो आप 'होस्टनाम' को '%' में बदल सकते हैं। उदाहरण के लिए, ... TO 'dbuser' @ '%' IDENTIFIED ... '%' होस्ट वाइल्डकार्ड है।
फिजियोमेडिकल

17
जब आप उपयोगकर्ताओं और तालिकाओं पर काम कर रहे हों, तो विशेषाधिकारों को न भूलें! :-)
corsiKa

31
इसने मेरे लिए काम किया: क्रीएट USER 'user1' @ 'localhost' IDENTIFIED BY 'पासवर्ड'; Db_database1 पर सभी PRIVILEGES प्राप्त करें। * 'user1' @ 'localhost' 'पासवर्ड द्वारा IDENTIFIED' के लिए; फ्लश PRIVILEGES;
मोहम्मद फकीह

4
@DanMcGrath: यदि उपयोगकर्ता पहले से मौजूद है और उसके पास पासवर्ड है, तो क्या 'पासवर्ड' के आधार पर पहचान अनिवार्य है?
नैनोसॉफ्ट

8
नए उपयोगकर्ता बनाने के लिए GRANT का उपयोग करके MySQL के भविष्य के रिलीज़ में इसे हटा दिया जाएगा (यह लिखने के समय इसे हटा दिया गया है)। भविष्य में इसे दो कॉल, क्रिएट USER फिर GRANT के साथ करना होगा।
डैरेन फेल्टन

325

वाक्य - विन्यास

MySQL / MariaDB 5.7.6 और उच्चतर में उपयोगकर्ता बनाने के लिए, CREATE USERसिंटैक्स का उपयोग करें :

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

फिर डेटाबेस (जैसे my_db) तक सभी पहुंच प्रदान करने के लिए , GRANTसिंटैक्स का उपयोग करें , जैसे

GRANT ALL ON my_db.* TO 'new_user'@'localhost';

कहाँ ALL( priv_type ) विशिष्ट विशेषाधिकार के रूप में इस तरह के साथ बदला जा सकता SELECT, INSERT, UPDATE, ALTER, आदि

फिर नए असाइन किए गए अनुमतियों को फिर से लोड करने के लिए:

FLUSH PRIVILEGES;

निष्पादित

कमांड से ऊपर चलाने के लिए, आपको mysqlकमांड चलाने और उन्हें तुरंत टाइप करने की आवश्यकता है , फिर quitकमांड या Ctrl- द्वारा लॉगआउट करें D

शेल से चलने के लिए, -eपैरामीटर का उपयोग करें ( SELECT 1उपरोक्त आदेशों में से एक के साथ बदलें ):

$ mysql -e "SELECT 1"

या मानक इनपुट से प्रिंट स्टेटमेंट:

$ echo "FOO STATEMENT" | mysql

यदि आपके पास पहुँच से वंचित है, तो निर्दिष्ट करें -u(उपयोगकर्ता के लिए) और -p(पासवर्ड के लिए) पैरामीटर, या दीर्घकालिक पहुँच के लिए अपने क्रेडेंशियल्स सेट करें ~/.my.cnfजैसे;

[client]
user=root
password=root

शैल एकीकरण

MySQL सिंटैक्स से परिचित नहीं लोगों के लिए, यहां आसान शेल फ़ंक्शन हैं जो याद रखना और उपयोग करना आसान है (उनका उपयोग करने के लिए, आपको शेल फ़ंक्शन को और नीचे लोड करने की आवश्यकता है)।

यहाँ उदाहरण है:

$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'

$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo

$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES

$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost                                                                                   
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'

$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'

$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo

ऊपर दिए गए आदेशों का उपयोग करने के लिए, आपको अपनी आरसी फ़ाइल (जैसे .bash_profile) में निम्नलिखित कार्यों को कॉपी और पेस्ट करना होगा और अपने शेल या स्रोत को पुनः लोड करना होगा। इस मामले में बस टाइप करें source .bash_profile:

# Create user in MySQL/MariaDB.
mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB
mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.
mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.
mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.
mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.
mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}

नोट: यदि आप अपने बैश इतिहास में ट्रेस (जैसे पासवर्ड) नहीं छोड़ना पसंद करते हैं, तो जांच करें: बैश इतिहास में दिखाने के लिए कमांड कैसे रोकें?


1
क्या आपको उपयोगकर्ता बनाने और अलग से विशेषाधिकार प्रदान करने की आवश्यकता है? मैंने पाया है कि अनुदान कमांड उपयोगकर्ता को स्वयं बनाता है, कम से कम mysql.user तालिका में इस तरह दिखता है।
टिम

@CreativityKills पासवर्ड के साथ काम करेगा यदि आप उन्हें अपने ~/.my.cnfऊपर बताए अनुसार जोड़ते हैं ।
kenorb

शेल इतिहास में पासवर्ड का निशान छोड़ना एक महान विचार नहीं है
dmirkitanov

@dmirkitanov आप एक स्थान जोड़कर इसे रोक सकते हैं, देखें: बैश इतिहास में दिखाने के लिए आदेशों को कैसे रोकें?
kenorb

58

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

MySQL में लॉग इन करें:

mysql -u root

अब बनाएं और अनुदान दें

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

अनाम उपयोगकर्ता (केवल स्थानीय परीक्षण के लिए)

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

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

जागरूक रहें

यह विकास में जंक डेटा के लिए ठीक है। आप जिस चीज की परवाह करते हैं, उसके साथ ऐसा न करें।


3
आप उस तरह एक अनाम उपयोगकर्ता बना सकते हैं, लेकिन नहीं! पूर्ण विशेषाधिकार वाले उपयोगकर्ता के लिए कोई अच्छा कारण नहीं है और कोई पासवर्ड नहीं है, लेकिन यह अच्छी तरह से आपको दिन / वर्ष / व्यवसाय / नौकरी को बर्बाद कर सकता है यदि किसी को आपके सर्वर तक पहुंच मिलती है जो नहीं होनी चाहिए। उनके लिए कुछ और आसान क्यों करें?
ल्यूक कजिन

2
यदि किसी ने मेरी मैकबुक तक दूरस्थ पहुंच प्राप्त की है, तो मेरे पास मेरे विकास डेटाबेस की सामग्री की तुलना में चिंता करने के लिए और अधिक चीजें हैं। मुझे फिर से पुनरावृत्त होना चाहिए, यह केवल स्थानीय परीक्षण के लिए है, वास्तविक डेटा के साथ ऐसा न करें।
superluminary

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

1
शायद। मेरे मामले में यह जंक डेटा है, मैं जोखिम के साथ रहूंगा।
superluminary

17
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

उपेक्षा करें -p विकल्प, अगर mysql उपयोगकर्ता के पास कोई पासवर्ड नहीं है या बस बाय-पास करने के लिए "[Enter]" बटन दबाएं। घुंघराले ब्रेसिज़ से घिरे तारों को वास्तविक मूल्यों के साथ बदलने की आवश्यकता होती है।


13

आप CREATE USER कथन का उपयोग करके नए उपयोगकर्ता बना सकते हैं , और GRANT का उपयोग करके उन्हें अधिकार दे सकते हैं ।


USER 'jeffrey' @ 'localhost' IDENTIFIED BY 'mypass';
CGL

6

मेरे लिए यह काम किया।

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

कहाँ पे

  • spowner: उपयोगकर्ता नाम
  • 1234: पालक का पासवर्ड
  • परीक्षण: डेटाबेस 'spowner' के पास अधिकार है

2

यदि आप एक नया उपयोगकर्ता बनाना चाहते हैं तो नीचे दी गई कमांड काम करेगी, उसे आपके स्थानीयहोस्ट पर एक विशिष्ट डेटाबेस (आपके मैसकल में सभी डेटाबेस नहीं) तक पहुंच प्रदान करें।

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

यह लोकलहोस्ट पर उस उपयोगकर्ता को एक डेटाबेस test_database(आपके मामले में dbTest) के लिए सभी विशेषाधिकार प्रदान करेगा ।

नीचे दिए गए आदेश को चलाकर उस उपयोगकर्ता को जारी की गई अनुमतियाँ ऊपर की जाँच करें।

SHOW GRANTS FOR 'user'@'localhost'

यदि आप केवल एक ही तालिका में उपयोगकर्ता की पहुंच को सीमित करना चाहते हैं, तो बस

GRANT ALL ON mydb.table_name TO 'someuser'@'host';

सिंटेक्स त्रुटि और आपकी पहली पंक्ति में एक टाइपो, "PRIVILEGES ON 'test_datase'" में उद्धरण नहीं होना चाहिए, इसके बाद "। *" होना चाहिए, उदाहरण के लिए, test_datase। *, और एक टाइपो है, "test_database होना चाहिए। "।
ब्रेटिन्स

0

यदि hostभाग को छोड़ दिया जाता है तो यह %सभी मेजबानों को अनुमति देते हुए वाइल्डकार्ड प्रतीक को डिफॉल्ट करता है।

CREATE USER 'service-api';

GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'

SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.