检查mysql用户是否存在

时间:2010-06-16 00:04:55

标签: mysql

如何检查用户是否存在?

我正在为mysql数据库做一个安装程序,我需要检查用户是否退出,如果没有创建用户,如果是,则删除用户并再次创建。

这样我就可以毫无后顾之忧地执行脚本了。

感谢。

7 个答案:

答案 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实际上意味着没有特权。

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

答案 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

相应地更改myusermydatabasemypassword

答案 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用于删除查询结果标头