जवाबों:
उपयोगकर्ता बनाने के लिए यह प्रयास करें:
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'
- जैसा कि आपने अनुमान लगाया होगा, यह उस उपयोगकर्ता के लिए पासवर्ड सेट करता है।
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'"
}
नोट: यदि आप अपने बैश इतिहास में ट्रेस (जैसे पासवर्ड) नहीं छोड़ना पसंद करते हैं, तो जांच करें: बैश इतिहास में दिखाने के लिए कमांड कैसे रोकें?
~/.my.cnf
ऊपर बताए अनुसार जोड़ते हैं ।
MySQL में लॉग इन करें:
mysql -u root
अब बनाएं और अनुदान दें
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
वैकल्पिक रूप से, यदि आप डेटाबेस के लिए पूर्ण अप्रतिबंधित एक्सेस देना चाहते हैं (उदाहरण के लिए अपने स्थानीय मशीन पर परीक्षण उदाहरण के लिए, तो आप अनाम उपयोगकर्ता को एक्सेस प्रदान कर सकते हैं, जैसे:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
यह विकास में जंक डेटा के लिए ठीक है। आप जिस चीज की परवाह करते हैं, उसके साथ ऐसा न करें।
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
उपेक्षा करें -p विकल्प, अगर mysql उपयोगकर्ता के पास कोई पासवर्ड नहीं है या बस बाय-पास करने के लिए "[Enter]" बटन दबाएं। घुंघराले ब्रेसिज़ से घिरे तारों को वास्तविक मूल्यों के साथ बदलने की आवश्यकता होती है।
आप CREATE USER कथन का उपयोग करके नए उपयोगकर्ता बना सकते हैं , और GRANT का उपयोग करके उन्हें अधिकार दे सकते हैं ।
मेरे लिए यह काम किया।
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
कहाँ पे
यदि आप एक नया उपयोगकर्ता बनाना चाहते हैं तो नीचे दी गई कमांड काम करेगी, उसे आपके स्थानीयहोस्ट पर एक विशिष्ट डेटाबेस (आपके मैसकल में सभी डेटाबेस नहीं) तक पहुंच प्रदान करें।
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';