2010-06-16 21 views
16

मैं कैसे जांच सकता हूं कि कोई उपयोगकर्ता मौजूद है या नहीं?जांच कर रहा है कि MySQL उपयोगकर्ता मौजूद है

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

यह इसलिए मैं चिंताओं के बिना स्क्रिप्ट निष्पादित कर सकता हूं।

धन्यवाद।

उत्तर

5

आप MySQL उपयोगकर्ता वैसे भी हटा रहे हैं, तो वहाँ वास्तव में अगर यह पहले से मौजूद है की जाँच करने की कोई जरूरत नहीं है।

DELETE FROM mysql.user WHERE User = 'username'; 
+0

+1 एक कदम आगे सोचने के लिए +1 .. मुझे यह पसंद है –

+6

यह उपयोगकर्ता दृष्टिकोण से उपयोगकर्ता को हटा देगा, यदि आप यह दृष्टिकोण लेते हैं, तो आपको mysql.columns_priv, mysql.db, mysql.tables_priv से भी हटाना होगा । इसके अलावा तालिका की यह सूची भविष्य में MySQL संस्करणों में बदल सकती है। – stivlo

+0

कभी भी, इस तरह से किसी उपयोगकर्ता को हटाएं। 'ड्रॉप उपयोगकर्ता' कमांड का प्रयोग करें। –

49

MySQL mysql नामक डेटाबेस में user नामक तालिका में उपयोगकर्ता डेटा संग्रहीत करता है (डिफ़ॉल्ट रूप से)। निम्न क्वेरी 1 लौटाएगी यदि निर्दिष्ट उपयोगकर्ता नाम वाला उपयोगकर्ता मौजूद है, तो 0 अन्यथा।

SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username') 
0

MySQL ड्रॉप उपयोगकर्ता का अभाव है मौजूद है का निर्माण: मौजूद है या नष्ट करने के लिए कुछ भी नहीं MySQL किसी भी त्रुटि फेंक नहीं होंगे।

एक अच्छा कामकाज उपयोगकर्ता को इसे छोड़ने से पहले हानिरहित विशेषाधिकार प्रदान करना है। यह उपयोगकर्ता अगर यह मौजूद नहीं है, है, तो जैसे पैदा करेगा ताकि इसे सुरक्षित रूप से छोड़ा जा सकता है:

GRANT USAGE ON *.* TO 'username'@'localhost'; 
DROP USER 'username'@'localhost'; 
FLUSH PRIVILEGES; 

उपयोग वास्तव में कोई विशेषाधिकार का मतलब है।

स्रोत: http://bugs.mysql.com/bug.php?id=19166

+2

वंशावली के लिए, यह कामकाज अब काम नहीं करता है। किसी अन्य उत्तर की टिप्पणी से उद्धरण: "यह अब एक विकल्प नहीं है। :(MySQL का वर्तमान संस्करण अब GRANT कथन के लिए एक नया उपयोगकर्ता नहीं बनाता है। यह एक" फ़ीचर "था जिसे उन्होंने जोड़ा।;)" मूल संदर्भ के लिए, देखें: http://stackoverflow.com/a/3241918/656243 –

0

यह कैसे मैं यह करने के लिए कर रहा था है:

#!/usr/bin/env bash 

set -o errexit 
set -o nounset 

# Create credentials file 
echo -e "[client]\nuser=root\npassword=${MYSQL_ROOT_PASSWORD}" > ~/.my.cnf 

# Create standard user and grant permissions 
if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = 'myuser';" | mysql | grep 1 &> /dev/null; then 
    echo "Creating database user ..." 
    echo "CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; 
      GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost'; 
      FLUSH PRIVILEGES;" | mysql 
else 
    echo "Database user already created. Continue ..." 
fi 

बदलें myuser, mydatabase और mypassword तदनुसार।

+0

यदि उपयोगकर्ता नाम 1 अंक है तो यह ठीक से काम नहीं करता है। इसलिए इससे नुकसान हो सकता है। – Joachim

+0

@ जोचिम ने अभी उपयोगकर्ता के उपयोगकर्ता नाम में 1 के साथ इसका परीक्षण किया है, और यह पूरी तरह से काम करता है। क्या आपको यकीन है? यह किसी उपयोगकर्ता के लिए 1 के साथ क्यों काम नहीं करना चाहिए? – Havok

संबंधित मुद्दे