如何检查用户是否存在?
我正在为mysql数据库做一个安装程序,我需要检查用户是否退出,如果没有创建用户,如果是,则删除用户并再次创建。
这样我就可以毫无后顾之忧地执行脚本了。
感谢。
答案 0 :(得分:58)
MySQL将用户数据存储在名为user
的数据库中的mysql
表中(默认情况下)。如果具有指定用户名的用户存在,则以下查询将返回1
,否则为0
。
SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username')
答案 1 :(得分:6)
如果您正在删除MySQL用户,那么实际上不需要先检查它是否存在。如果没有什么可删除的话,MySQL不会抛出任何错误:
DELETE FROM mysql.user WHERE User = 'username';
答案 2 :(得分:1)
MySQL缺少DROP USER IF EXISTS构造。
一个好的解决方法是在删除之前向用户授予无害特权。这个 将创建用户(如果它不存在),以便可以安全地删除它,如下所示:
GRANT USAGE ON *.* TO 'username'@'localhost';
DROP USER 'username'@'localhost';
FLUSH PRIVILEGES;
USAGE实际上意味着没有特权。
答案 3 :(得分:1)
这就是我能够做到的:
#!/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
。
答案 4 :(得分:1)
由于较新版本的MySQL允许此选项:
DROP USER IF EXISTS 'username'@'host';
答案 5 :(得分:0)
MySQL 5.7已经包含DROP USER IF EXISTS
,但是对于较旧的版本,我使用percona-toolkit中的pt-show-grants --drop
并将static int readInt(string prompt, int low, int high) // METHOD readInt
{
bool succes;
do
{
string intString = readString(prompt);
succes = Int32.TryParse(intString, out int temp);
if (succes)
{ Console.WriteLine("The string was a number within the limits, {0}.", intString);
return temp;
}
else
{
Console.WriteLine("{0} is not a valid number between {1} and {2}", intString, low, high);
}
} while (!succes && (result < low) || (result > high));
}
部分反馈给mysql:
DROP USER
如果有多个用户名-主机名对,则将它们全部删除。
答案 6 :(得分:0)
需要检查用户是否存在而没有删除时(例如,仅跳过某些指令而不是在任何情况下执行它们),则可以使用它(其中$USER
是要检查的用户):
if [ $(echo "SELECT COUNT(*) FROM mysql.user WHERE user = '$USER'" | mysql | tail -n1) -gt 0 ]
then
echo "User exists"
else
echo "User doesn't exist"
fi
NB:
mysql
命令需要额外的参数和/或用于身份验证的配置)tail -n1
用于删除查询结果标头