我安装了Percona Toolkit来使用pt-show-grants
,但它没有显示所有的授权。当我运行它时,看到以下输出:
-- Grants dumped by pt-show-grants
-- Dumped from server Localhost via UNIX socket, MySQL 5.5.43-log at 2015-06-11 09:19:19
-- Grants for 'bob'@'12.34.56.78'
GRANT SUPER ON *.* TO 'bob'@'12.34.56.78' IDENTIFIED BY PASSWORD '*4F72B97CAAAAAAAAAAA9C38064C4CCB18CA0DD8';
GRANT SELECT ON `mydb`.* TO 'bob'@'12.34.56.78';
...
在这种情况下,
bob
只是一个用户。但所有的网站都使用特定的凭据,例如开发人员Bob可能会为他的example.com网站拥有一个帐户,称为bob_examplecom_1
。当我显示该帐户的授权时:mysql> SHOW GRANTS FOR 'bob_examplecom_1'@'localhost';
+-------------------------------------------------------------------------------------------------------------------------+
| Grants for bob_examplecom_1@localhost |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob_examplecom_1'@'localhost' IDENTIFIED BY PASSWORD '*74AE8018AAAAAAAAAAAAAAAABB87B5C83E650CB' |
| GRANT ALL PRIVILEGES ON `bob_core`.* TO 'bob_examplecom_1'@'localhost' WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `bob_examplecom_main`.* TO 'bob_examplecom_1'@'localhost' WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `bob_blog`.* TO 'bob_examplecom_1'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)
然而,当我尝试查找相关用户时:
mysql> SELECT User, Host FROM mysql.user WHERE User LIKE 'bob\_%';
Empty set (0.00 sec)
假设原始的GRANT
没有创建关联的用户账户?还要注意,上面是一个网站的例子,有很多个网站。我可能错过了什么,但我期望在某种模式下看到NO_AUTO_CREATE_USER
:
mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
| |
+-------------------+
1 row in set (0.00 sec)
所以,我的问题是我想使用
pt-show-grants
为这个开发服务器上的新用户创建一个SQL文件,其中包含需要运行的许多GRANT
,但我不知道该如何操作。我是否需要回顾性地创建与GRANT
相匹配的用户帐户?我应该在将来更改一些设置和/或以不同的方式设置帐户吗?更新:我刚刚运行了
FLUSH PRIVILEGES
,所有工作正常且没有与mysql.user
中的帐户相关联的GRANT
都消失了。这是否意味着它们永久消失了,所有内容都需要手动重新创建?为什么会发生这种情况?我查看了MySQL命令历史记录,没有发现过去删除这些帐户的命令。此服务器的正常运行时间超过400天,并且在此期间所有站点都能正常工作,几乎没有任何问题。更新2:我不得不重新创建所有帐户。这次,使用
GRANT USAGE
然后授予权限确实创建了用户帐户。我的问题现在很简单:为什么MySQL GRANT在执行
GRANT
时没有创建关联的用户帐户?
mysql
.user
.user
是可能用户的列表。 - Rick Jamespt-show-grants
,因为它会将输出标准化,这样可以将其作为备份放入版本控制中。 - LeonardChallis