Mysql 远程连接日志

Mysql 远程连接日志

我需要允许远程连接到在最新稳定的 CentOS 上运行的 mysql 服务器。

我一点也不喜欢这个想法,所以我至少想收集尽可能多的相关信息。确切地说,我需要(想要)以下内容:

  • [日期时间] 1.2.3.4 已连接
  • [datetime] 3.4.5.6 密码错误

根据mysql 手册,要么记录所有内容(不可接受的性能开销),要么不记录任何与我相关的内容(这可以帮助我们追踪攻击者/不负责任的管理员)。

我考虑过每 N 分钟抓取一次并删除这个日志,但这似乎不对。

答案1

实际上有一种方法可以将所有连接记录到 mysql 本身中:

假设:我们将用来存储此信息的数据库名称为 admin。

  1. 创建表来存储连接信息。如果您不想,则不必包含唯一键。

    CREATE TABLE admin.connections (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, connect_time DATETIME NOT NULL, user_host VARCHAR(50) NOT NULL, connection_id INT UNSIGNED NOT NULL, UNIQUE INDEX idx_connect_time_user_host (connect_time, user_host));

  2. 设置 init-connect 变量。这是每个连接客户端都要执行的字符串。详情请见此处。

    SET GLOBAL init_connect = "INSERT INTO admin.connections (connect_time, user_host, connection_id) VALUES (NOW(), CURRENT_USER(), CONNECTION_ID());";

  3. 检查所有用户的权限,以确保他们可以将记录插入 admin.connections 表中。

  4. 以不具有全局权限的用户身份登录,应在 admin.connections 表中插入一行。请注意,init-connect 系统变量对具有全局权限的用户不起作用。无论好坏,我们所有 DBA 都知道这意味着什么。

  5. 观察你的连接表的成长和繁荣。你刚刚开始了一个新的宠物(项目)。

来源:http://mysqlhints.blogspot.com.es/2011/01/how-to-log-user-connections-in-mysql.html

现在你必须期望你的用户是负责任的,他们可能会开始用数据淹没你的表,但这样你就是在与一个心怀恶意的人打交道。为了安全起见,我会使用一个远程位置来监视这个表并保留它的副本。

相关内容