【问题标题】:mysql create user if not existsmysql 如果不存在则创建用户
【发布时间】:2012-11-01 16:56:24
【问题描述】:

我有一个查询要检查 mysql 用户列表以创建新用户。

IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = '{{ title }}')) = 0 THEN
    CREATE USER '{{ title }}'@'localhost' IDENTIFIED BY '{{ password }}'
END IF;

但我得到这个错误:

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = 'cms_localhost')) = 0 ' at line 1

【问题讨论】:

    标签: mysql user-management


    【解决方案1】:

    在5.7.6及以上,你应该可以使用CREATE USER

    CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY 'password';
    

    请注意,5.7.6 方法实际上并不授予任何权限。


    如果您使用的不是具有此功能的版本(低于 5.7.6),您可以执行以下操作:

    GRANT ALL ON `database`.* TO 'user'@'localhost' IDENTIFIED BY 'password';
    

    如果用户不存在,这将创建用户


    注意,如果您使用的是 MySQL 8,GRANT ALL 方法将不会创建用户。

    【讨论】:

    • 如果用户确实存在并且密码不同,这是否会更改密码?
    • 没关系 - 回答了我自己的问题 - 是的 - 但如果主机不同,它不会取代用户
    • @m3z 从技术上讲,如果您有可以登录两个不同主机的用户,那么他们不是同一个用户。他们可以拥有不同的权限、不同的密码以及一切。
    • 是的@roundar,但这会留下安全漏洞。请注意。
    • 如果你不指定密码@B166ER,它唯一不安全的,这......duh。
    【解决方案2】:

    我用

    SELECT EXISTS (SELECT DISTINCT user FROM mysql.user WHERE user = "username") as is_user

    如果存在则返回 1,如果不存在则返回 0

    【讨论】:

    • 问题不是如何检查,而是如何创建
    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2017-03-13
    • 2023-03-23
    • 2010-12-11
    相关资源
    最近更新 更多