2010-06-16 164 views
16

如何檢查用戶是否存在?檢查mysql用戶是否存在

我正在做一個mysql數據庫的安裝程序,我需要檢查用戶是否退出,如果沒有創建用戶,如果是刪除用戶並重新創建。

這樣我就可以執行腳本而不用擔心了。

謝謝。

回答

5

如果你正在刪除MySQL用戶,那麼真的不需要檢查它是否先存在。如果沒有東西要刪除,MySQL不會拋出任何錯誤:

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

+1思維提前一步..我喜歡它 – 2010-06-16 01:45:00

+6

這將刪除用戶只是從用戶表,如果你採取這種方法,你也必須從mysql.columns_priv,mysql.db,mysql.tables_priv 。此外,此表的列表可能會在未來的MySQL版本中發生變化。 – stivlo 2011-06-30 15:11:48

+0

永遠不要以這種方式刪除用戶。使用「DROP USER」命令。 – 2017-12-05 18:03:36

49

MySQL在名爲mysql(默認情況下)的數據庫中將用戶數據存儲在名爲user的表中。如果存在指定用戶名的用戶,則以下查詢將返回1,否則0

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

MySQL缺少DROP USER如果EXISTS構造。

一個很好的解決方法是在刪除之前向用戶授予無害特權。這 將創建用戶,如果它不存在,所以它可以安全地丟棄,就像這樣:

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

用法,其實就是沒有特權。

來源:http://bugs.mysql.com/bug.php?id=19166

+2

對於後代,此解決方法不再有效。引用另一個答案的評論:「這不再是一個選項:(當前版本的MySQL不再爲GRANT語句創建一個新用戶,而是他們添加的」Feature「;)」對於原始參考,請參閱: http://stackoverflow.com/a/3241918/656243 – 2012-08-30 15:19:49

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 

變化myusermydatabasemypassword相應。

+0

如果用戶名包含數字1,這不起作用。所以這可能會導致陷阱。 – Joachim 2018-02-19 15:09:37

+0

@Joachim剛剛用一個用戶名爲1的用戶進行了測試,它完美地工作。你確定?爲什麼它不適用於1用戶? – Havok 2018-02-20 08:40:33