在mysql
的一般日志中,我看到如下内容:
141017 8:57:31 4 Connect root@localhost as anonymous on
这个“匿名”是什么意思?我以root@localhost
. 我仍然是匿名的,甚至是“匿名”吗?
UPD
$ systemctl stop mysqld
$ rm -f /var/lib/mysql/yuri.log
// enable general log in /etc/mysql/my.cnf
$ systemctl start mysqld
$ mysql -u root -p -BNe 'SELECT USER() HowYouAttemptedToLogin, CURRENT_USER() HowMySQLAllowedYouToLogin;'
Enter password:
root@localhost root@localhost
$ mysql -u root -p -BNe 'SELECT host, user FROM mysql.user;'
Enter password:
127.0.0.1 root
::1 root
localhost hostname
localhost root
$ cat /var/lib/mysql/yuri.log
/usr/bin/mysqld, Version: 10.0.14-MariaDB-log (MariaDB Server). started with:
Tcp port: 3306 Unix socket: /run/mysqld/mysqld.sock
Time Id Command Argument
141204 19:03:19 3 Connect UNKNOWN_USER@localhost as anonymous on
3 Connect Access denied for user 'UNKNOWN_USER'@'localhost' (using password: NO)
141204 19:04:55 4 Connect root@localhost as anonymous on
4 Query select @@version_comment limit 1
4 Query SELECT USER() HowYouAttemptedToLogin, CURRENT_USER() HowMySQLAllowedYouToLogin
4 Quit
141204 19:05:47 5 Connect root@localhost as anonymous on
5 Query select @@version_comment limit 1
5 Query SELECT host, user FROM mysql.user
5 Quit
在全球搜索了一些大联盟之后,我想我找到了答案。
从这些帖子中我看到了一些有趣的东西
13679547 Connect @localhost as anonymous on test
140612 12:33:07 3 Connect gk_admin at localhost as anonymous on dTEST_db
我的猜想如下:下面
as anonymous on
是当前连接的数据库一般日志条目必须说
as anonymous on mysql
一般日志条目必须说
as anonymous on test
一般日志条目必须说
as anonymous on
试试看 !!!
更新 2014-12-04 14:26 EST
你准备好了吗?我有一个旧帖子,其中有人有源代码
as anonymous on
log_warnings 似乎不适用于 MySQL 5.1 中的中止连接
在我 2 岁的帖子中的代码中,
as anonymous on
是硬编码的!再看代码
请注意引用数据库的代码部分
db ? db : (char*) "");
。变量db
(当前数据库)指向数据库名称或空字符串。回答这个问题的奇怪之处在于,这是我第二次不得不回顾我自己多年前写的一篇文章。第一次是这样的:MySQL 是否仍然以这种方式处理索引?
更新 2014-12-17 16:45 EST
根据您最后的评论
在你的问题中,你问
What is this "as anonymous on" thing even means?
了我说的答案是Either the db variable (the current database) points to a database name or an empty string
。至于thd->main_security_ctx.user, thd->main_security_ctx.host_or_ip
,那就是root@localhost
。接下来as anonymous
是当前的数据库。这没什么好想明白的。你接着问
Am I still anonymous, or even "anonymous on"?
。答案必须是肯定的,因为您已被认证为数据库连接的用户,并且您的连接像任何其他线程一样成为活动线程。任何连接
都是相等的线程。通用日志不区分一个 DB 连接与另一个。无论连接是内部连接还是外部连接,代码都会以相同的方式检查所有连接。
如果我的回答仍然不能回答您的问题,那么您确实可以做一件事:转到 MySQL 论坛并将此问题发布给开发人员。由于
Konstantin Osipov
开发人员正在响应 Bug 列表并引用了使用 中的表达式as anonymous on
的源代码 (bugs.mysql.com/bug.php?id=24761),因此general_log_print function
他必须知道正确的上下文和原因使用表达式as anonymous on
。更新 2018-08-12 19:46 EDT
根据您的猜想,我四处搜索并从一般日志中找到示例输出:
请查看示例日志中的两个时间戳条目:
以及您问题的原始日志条目:
在这些时间点,即使
root@localhost
出现,用户也没有经过身份验证。该代码的注释确实支持您的猜想。您现在可以直接从源代码的作者那里得到答案。感谢您接受我发布的答案(这导致您找到真正的答案)