如何檢查用戶是否存在?檢查mysql用戶是否存在
我正在做一個mysql數據庫的安裝程序,我需要檢查用戶是否退出,如果沒有創建用戶,如果是刪除用戶並重新創建。
這樣我就可以執行腳本而不用擔心了。
謝謝。
如何檢查用戶是否存在?檢查mysql用戶是否存在
我正在做一個mysql數據庫的安裝程序,我需要檢查用戶是否退出,如果沒有創建用戶,如果是刪除用戶並重新創建。
這樣我就可以執行腳本而不用擔心了。
謝謝。
如果你正在刪除MySQL用戶,那麼真的不需要檢查它是否先存在。如果沒有東西要刪除,MySQL不會拋出任何錯誤:
DELETE FROM mysql.user WHERE User = 'username';
MySQL在名爲mysql
(默認情況下)的數據庫中將用戶數據存儲在名爲user
的表中。如果存在指定用戶名的用戶,則以下查詢將返回1
,否則0
。
SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username')
MySQL缺少DROP USER如果EXISTS構造。
一個很好的解決方法是在刪除之前向用戶授予無害特權。這 將創建用戶,如果它不存在,所以它可以安全地丟棄,就像這樣:
GRANT USAGE ON *.* TO 'username'@'localhost';
DROP USER 'username'@'localhost';
FLUSH PRIVILEGES;
用法,其實就是沒有特權。
對於後代,此解決方法不再有效。引用另一個答案的評論:「這不再是一個選項:(當前版本的MySQL不再爲GRANT語句創建一個新用戶,而是他們添加的」Feature「;)」對於原始參考,請參閱: http://stackoverflow.com/a/3241918/656243 – 2012-08-30 15:19:49
這是我能做到這一點:
#!/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
相應。
+1思維提前一步..我喜歡它 – 2010-06-16 01:45:00
這將刪除用戶只是從用戶表,如果你採取這種方法,你也必須從mysql.columns_priv,mysql.db,mysql.tables_priv 。此外,此表的列表可能會在未來的MySQL版本中發生變化。 – stivlo 2011-06-30 15:11:48
永遠不要以這種方式刪除用戶。使用「DROP USER」命令。 – 2017-12-05 18:03:36