【问题标题】:Adding new host entries to existing mysql users向现有 mysql 用户添加新主机条目
【发布时间】:2013-10-09 19:54:02
【问题描述】:

我在 mysql 数据库中有一个相当明确的列表,其中包含 50 个左右的用户。他们在用户表中的所有内容看起来像这样:

mysql> select user,host,password from user where host = '1.2.3.4';
+--------+---------+----------+
| user   | host    | password |
+--------+---------+----------+
| user1  | 1.2.3.4 | *XXX...  |
| user2  | 1.2.3.4 | *YYY...  |
| user3  | 1.2.3.4 | *ZZZ...  |
etc.

我想做的是为每个用户添加第二个条目,以便他们也可以使用相同的密码从 10.% 连接并从 10.% 授予完全访问权限,但保留现有授权。

有没有一种方法可以在 mysql 中完成所有这些操作(出于自动化目的),或者我是否必须编写一个脚本来转储用户和密码散列然后为 10.% 主机发出新的授权语句?

【问题讨论】:

标签: mysql


【解决方案1】:
INSERT INTO user (user, host, password)
SELECT U.user, '10.x' AS NHost, U.password FROM user AS U 

【讨论】:

  • 当我尝试这个时我得到ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value。谁能启发我,上面的哪些字符串是实际值的占位符(如果有的话)。或者如何更改语法以使其正常工作?
  • 嗯,我从SHOW CREATE TABLE user; 看到其中一些没有默认值:x509_issuer blob NOT NULL, 所以我需要将它们添加到 INSERT 部分和 SELECT 部分的列表中。
  • 我无法让它工作。我必须在命令中添加一些列,以便它成功而没有错误,但是一旦我这样做了,我就得到了ERROR 1877 (HY000): Operation cannot be performed. The table 'mysql.user' is missing, corrupt or contains bad data. 我认为给定的 INSERT 将在简单的情况下工作,但警告管理员。
  • 需要运行 FLUSH PRIVILEGES;插入后
  • 我自己是 MySQL 的初学者,但我认为接受的答案是错误的。我遇到了这个错误,因为我犯了(我认为是)同样的错误:试图在 INSERT INTO 命令而不是 CREATE USER 命令的帮助下将用户添加到用户表。请参阅 URL dev.mysql.com/doc/refman/8.0/en/creating-accounts.html 上的“6.2.8 添加帐户、分配权限和删除帐户”。它甚至对此有一个注释:“注意不鼓励使用 INSERT、UPDATE 或 DELETE 等语句直接修改授权表,风险自负。”
【解决方案2】:

如果您已经知道用户的凭据,您也可以这样做。

CREATE USER 'some_user_name'@`some_new_host_or_ip` IDENTIFIED BY 'existing_password';

FLUSH PRIVILEGES;

顺便说一下,上面提到的帖子,我找不到password字段,不确定它是否与MySQL版本有关。就我而言,就像下面一样。所以只要这东西可以帮助别人

insert into mysql.user (user,host,authentication_string)
    select user,'some_new_host_or_ip',authentication_string 
    from mysql.user where user = 'some_user_name' limit 1

FLUSH PRIVILEGES;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2015-05-08
    • 2011-04-09
    • 2012-02-16
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多