向现有的MySQL用户添加新主机条目

8

我有一个相当明确的包含50个左右用户信息的mysql数据库列表。这些用户在用户表中的所有条目看起来都像这样:

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.%主机?

1
请查看 https://dev.mysql.com/doc/mysql-utilities/1.6/en/mysqluserclone.html。 - Rick James
2个回答

8
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”的错误。有人能告诉我上面的哪些字符串是真实值的占位符(如果有的话)?或者如何更改语法以使其正常工作? - Mike S
我从SHOW CREATE TABLE user;看到有些东西没有默认值: x509_issuer blob NOT NULL,,因此我需要将它们添加到INSERT部分和SELECT部分的列表中。 - Mike S
我无法让它工作。我不得不向命令中添加多个列,以便它可以成功执行而没有错误,但是一旦我这样做了,我收到了“ERROR 1877 (HY000):无法执行操作。表'mysql.user'缺失,损坏或包含错误数据。” 我认为所给的INSERT将在简单情况下起作用,但请管理员注意。 - Mike S
2
在插入操作之后需要运行FLUSH PRIVILEGES;。 - Dariux
我自己在MySQL方面是个初学者,但我认为被接受的答案是错误的。我遇到了这个错误,因为我犯了(我认为是)同样的错误:试图使用INSERT INTO命令而不是CREATE USER命令将用户添加到用户表中。请参阅URL https://dev.mysql.com/doc/refman/8.0/en/creating-accounts.html中的“6.2.8添加帐户、分配权限和删除帐户”。它甚至有一个关于此的注释:“注意不建议使用诸如INSERT、UPDATE或DELETE之类的语句直接修改授权表,这样做存在风险。” - Thomas Hedden

0

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

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接