डेटाबेस पर ** सभी ** विशेषाधिकार प्रदान करें


611

मैंने डेटाबेस बनाया है, उदाहरण के लिए 'mydb'।

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

अब मैं हर जगह से डेटाबेस में प्रवेश कर सकता हूं, लेकिन टेबल नहीं बना सकता।

उस डेटाबेस और (भविष्य में) तालिकाओं पर सभी विशेषाधिकार कैसे प्रदान करें। मैं 'mydb' डेटाबेस में टेबल नहीं बना सकता। मुझे हमेशा मिलता है:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

10
जब आप CURRENT_USER के लिए शिकायतें प्राप्त करते हैं तो आपको क्या मिलता है;
diagonalbatman

5
क्या आपने दौड़ने की कोशिश की है FLUSH PRIVILEGES?
रोमेन

1
@Andy के लिए धन्यवाद "CURRENT_USER के लिए शोकेस;" - जो मुझे अपना टाइपो देखने में मदद करता है।
marioosh

2
flush privilegesजब आप grantआदेशों का उपयोग करते हैं , तो @ आवश्यक नहीं है । x4
पचेरियर

2
आप का उपयोग करना चाहिए FLUSH PRIVILEGES;केवल यदि आप अनुदान टेबल सीधे जैसे बयानों का उपयोग कर संशोधित INSERT, UPDATEयाDELETE
simhumileco

जवाबों:


910
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

इस तरह से मैं अपने "सुपर यूजर" विशेषाधिकारों का निर्माण करता हूं (हालांकि मैं सामान्य रूप से एक मेजबान निर्दिष्ट करूंगा)।

महत्वपूर्ण लेख

हालांकि यह जवाब पहुंच की समस्या को हल कर सकता है, WITH GRANT OPTIONएक MySQL उपयोगकर्ता बनाता है जो अन्य उपयोगकर्ताओं की अनुमतियों को संपादित कर सकता है ।

अनुदान विकल्प विशेषाधिकार आपको अन्य उपयोगकर्ताओं को देने या अन्य उपयोगकर्ताओं को उन विशेषाधिकारों से निकालने में सक्षम बनाता है जो आपके पास हैं।

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


35
@Romain आप वास्तव में यहाँ तालिका में बहुत कुछ नहीं ला रहे हैं - मैं अपने उपयोगकर्ताओं के नाम का उपयोग नहीं कर रहा हूँ - प्रश्नकर्ता केवल एक उदाहरण के रूप में उपयोगकर्ता नाम का उपयोग कर रहा था - मैंने स्थिरता के लिए उसी उदाहरण का उपयोग किया।
diagonalbatman

22
काफी उचित। लेकिन एक को दूसरे लोगों के बारे में भी सोचना होगा, संभवतः नए-नए, जो बाद में इस सवाल को पढ़ सकते हैं। यह SO की बात नहीं है?
रोमेन

7
मुझे भी नहीं लगता कि यह उत्तर अच्छा है। यह सभी डेटाबेस और सभी तालिकाओं पर "व्यवस्थापक" विशेषाधिकार देता है, जो कि पूछा नहीं गया था।
daks

5
मैंने इस उत्तर को mydb कहने के लिए संपादित किया। * के बजाय , क्योंकि यह इस तरह के एक व्यापक रूप से उत्कीर्ण और देखा गया उत्तर है, और मुझे विश्वास है कि सुरक्षा - विशेष रूप से MySQL जैसी पॉलिश की गई हल्दी के साथ - अत्यंत महत्वपूर्ण है। एक उम्मीद करेगा कि एक पाठक कॉपी और पेस्ट के बजाय उत्तर के विवरण की जांच करेगा, लेकिन मैं कभी-कभी वास्तविकता में रहना पसंद करता हूं।
जॉर्डन

4
@Romain MySQL सर्वर की स्थापना करने वाले उपयोगकर्ताओं को यह एहसास करने के लिए पर्याप्त बुद्धिमान हैं कि उन्हें myuserअपने स्वयं के कस्टम उपयोगकर्ता नाम से बदलना चाहिए ।
एस्फोटो

524

यह पुराना प्रश्न है लेकिन मुझे नहीं लगता कि स्वीकृत उत्तर सुरक्षित है। यदि आप किसी एकल डेटाबेस पर विशेषाधिकार देना चाहते हैं तो सुपर उपयोगकर्ता बनाना अच्छा नहीं है।

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

%सॉकेट संचार को कवर नहीं करने के लिए लगता है, कि के localhostलिए है। WITH GRANT OPTIONकेवल सुपर उपयोगकर्ता के लिए अच्छा है, अन्यथा यह आमतौर पर एक सुरक्षा जोखिम है।

MySQL 5.7+ के लिए अपडेट ऐसा लगता है जैसे इस बारे में चेतावनी देता है:

विशेषाधिकारों के अलावा मौजूदा उपयोगकर्ता की संपत्तियों को संशोधित करने के लिए GRANT स्टेटमेंट का उपयोग करने से पदावनत किया जाता है और भविष्य में रिलीज में हटा दिया जाएगा। इस ऑपरेशन के लिए ALTER USER कथन का उपयोग करें।

इसलिए पासवर्ड सेट करना अलग कमांड के साथ होना चाहिए। @ डरावना-गर्भ से टिप्पणी करने के लिए धन्यवाद।

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

उम्मीद है की यह मदद करेगा।


26
+1 WITH GRANT OPTIONसभी के बजाय एक निर्दिष्ट डेटाबेस को शामिल और लक्षित नहीं करने के लिए ( *)।
Adonis K. Kakoulidis

@IanBussieres का व्याकरण "% सॉकेट संचार को कवर नहीं करता है, ऐसा लगता है कि लोकलहोस्ट" के लिए स्पष्ट नहीं है। इसका वास्तव में क्या मतलब है?
तुफिर

2
@ तुहीर, के लिए खोजें unix sockets। का उपयोग करते समय localhostलिनक्स पर myslq ग्राहक एक यूनिक्स सॉकेट बजाय सर्वर के लिए एक TCP कनेक्शन का उपयोग करने की कोशिश कर रहा है।
अकोस्टैडिनोव

1
ध्यान दें कि शायद आपको पहले कमांड की आवश्यकता नहीं है जब तक कि आप बाहरी आईपी पते से या स्थानीय सबनेट पर अन्य कंप्यूटरों से एक्सेस नहीं चाहते हैं। यदि आप करते हैं, तो मैं उन आदेशों का उपयोग करने की सलाह दूंगा जो विशिष्ट आईपी पते पर लक्षित होते हैं जिन्हें आप अनुमति देना चाहते हैं, जैसे कि myuser@192.168.0.1 (स्थानीय सबनेट पर एक के लिए), बजाय myuser @% आमतौर पर।
इवान डोनोवन

1
mysql> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'new_password';
डरावना वोमैट

121

यह कुछ लोगों के लिए उपयोगी होगा:

MySQL कमांड लाइन से:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

अफसोस की बात है कि इस बिंदु पर नए डेटाबेस के साथ कुछ भी करने की कोई अनुमति नहीं है। वास्तव में, यदि नवागंतुक भी पासवर्ड (पासवर्ड, पासवर्ड के साथ) लॉगिन करने की कोशिश करता है, तो वे MySQL शेल तक नहीं पहुंच पाएंगे।

इसलिए, पहली बात यह है कि उपयोगकर्ता को उन सूचनाओं तक पहुंच प्रदान करनी होगी जिनकी उन्हें आवश्यकता होगी।

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

इस आदेश में तारांकन डेटाबेस और तालिका (क्रमशः) को संदर्भित करते हैं जो वे एक्सेस कर सकते हैं - यह विशिष्ट आदेश उपयोगकर्ता को सभी डेटाबेस और तालिकाओं में सभी कार्यों को पढ़ने, संपादित करने, निष्पादित करने और निष्पादित करने की अनुमति देता है।

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

FLUSH PRIVILEGES;

अब आपके परिवर्तन प्रभावी होंगे।

अधिक जानकारी के लिए: http://dev.mysql.com/doc/refman/5.6/en/grant.html

आप कमांड लाइन के साथ सहज नहीं हैं तो आप की तरह एक ग्राहक का उपयोग कर सकते MySQL कार्यक्षेत्र , Navicat या SQLyog


5
flush privileges जब आप उपयोग करते हैं तो इसकी आवश्यकता नहीं होती है grant आदेशों का । x4
पचेरियर

1
या तो आप Linode से कॉपी किए गए थोक हैं, या उन्होंने आपसे कॉपी किया: linode.com/docs/dat डेटाबेस

मुझे फिर से पहचान की जरूरत थी GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION; (अजीब ..., लेकिन सच) के
रुबों 7

30

 1. डेटाबेस बनाएँ

CREATE DATABASE db_name;

 2. डेटाबेस db_name के लिए उपयोगकर्ता नाम बनाएँ

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3. डेटाबेस का उपयोग करें

USE db_name;

 4. अंत में आप डेटाबेस में हैं db_name और फिर कमांड बनाएं जैसे कि क्रिएट, सिलेक्ट और इंसर्ट ऑपरेशन।


आज इसने मुझे चेतावनी दी "विशेषाधिकारों के अलावा मौजूदा उपयोगकर्ता की संपत्तियों को संशोधित करने के लिए GRANT स्टेटमेंट का उपयोग करना पदावनत है और भविष्य के रिलीज में होगा। इस ऑपरेशन के लिए ALTER USER स्टेटमेंट का उपयोग करें।" तो क्या मुझे यह समझना चाहिए कि मुझे एक उपयोगकर्ता बनाना चाहिए, फिर विशेषाधिकार प्रदान करना चाहिए, अब?
felwithe

आप MySQL को कैसे बता सकते हैं usernameजिसमें विशेषाधिकार db_nameनहीं बल्कि सभी विशेषाधिकार होने चाहिए DROP db_name;?
टॉनिक्स

21

यह एसक्यूएल सभी डेटाबेसों पर सिर्फ मूल विशेषाधिकार देता है। वे Drupal या Wordpress के लिए पर्याप्त हैं और एक आला के रूप में, स्थानीय परियोजनाओं के लिए एक डेवलपर खाते की अनुमति देता है।

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

20
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

स्कीमा पर विशेषाधिकार के लिए काम करता है :)

वैकल्पिक: mypasswdआप जोड़ सकते हैं के बादWITH GRANT OPTION


15

मैं इसे केवल जोड़कर काम करने में सक्षम कर सका GRANT OPTION, इसके बिना हमेशा अनुमति अस्वीकृत त्रुटि प्राप्त करता है

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

14

नमस्कार मैंने इस कोड का उपयोग mysql में सुपर यूजर के लिए किया है

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

और फिर

FLUSH PRIVILEGES;

11
flush privilegesजब आपgrant आदेशों का उपयोग करते हैं तो इसकी आवश्यकता नहीं होती है । x4
पचेरियर

नोट: सटीक सूची GRANTMySQL के संस्करणों के बीच भिन्न होती है।
रिक जेम्स

6

केवल दूरस्थ सर्वर से mydb डेटाबेस तक पहुँचने के लिए

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

दूरस्थ सर्वर से सभी डेटाबेस तक पहुँचने के लिए।

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

4

डेटाबेस पर सभी प्रिवलेज देने के लिए: mydbउपयोगकर्ता को:, myuserबस निष्पादित करें:

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

या:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGESकीवर्ड आवश्यक नहीं है।

इसके अलावा मुझे नहीं पता कि अन्य उत्तर यह क्यों सुझाते हैं कि IDENTIFIED BY 'password'कमांड के अंत में रखा जाए। मेरा मानना ​​है कि इसकी आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.