我有一个MySQL数据库可以被一群队友访问。是否有任何命令来获取当前正在访问或已经访问和注销的用户的日志信息?访问数据库的用户列表
回答
运行从一个MySQL工具下面查看所有正在运行的程序(包括睡眠连接):
SHOW PROCESSLIST
或者,您可以查询INFORMATION_SCHEMA表以获得相同的:
select * from information_schema.processlist
要查看所有人已登录的历史记录,可以将常规查询日志配置为转到表中,方法是将以下启动参数添加到您的mysqld启动“--log-output = TABLE --general-log”,然后你可以从general_log ta中查询这些信息在mysql模式中。以下是查询,你可以使用:
select * from mysql.general_log where command_type = 'Connect';
提醒一句的是,这个表可以得到巨大。你会想定期清理它。
通过查看SHOW PROCESSLIST或INFORMATION_SCHEMA.PROCESSLIST,可以获得当前与数据库保持连接的用户。
该数据的历史记录是不存在的。使用其他地方建议的通用查询日志不是一个好主意,因为它根本没有扩展:一般查询日志记录了服务器看到的每一条语句,并且它的写入大大增加了LOCK_log和磁盘I/O.如果您的通用查询日志是CSV表,则无法有效查询它,如果它是MyISAM表,它将基本上序列化数据库中的所有查询(即使是查询!)。
也就是说,因为每个查询都需要被记录,甚至读取查询。为此,需要写入一般查询日志。为此,请求MyISAM日志表上的表锁。这是非常缓慢的,即使在低负载的服务器上也不会提供任何建议。
不支持通用查询日志的其他格式。
有一组变量可以定义服务器启动,从属连接和用户连接的动作。
[email protected] [kris]> show global variables like 'init%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| init_connect | |
| init_file | |
| init_slave | |
+---------------+-------+
3 rows in set (0.00 sec)
通过init_connect设置到注销当前用户,当前时间,你可以生成你想要在日志中更可扩展的方式连接ID的INSERT语句。使用带有auto_increment id的InnoDB表格。
请注意,出于安全原因,init_connect未针对root用户(SUPER_PRIV)的登录进行处理。这些将会逃避你的记录。
在MySQL 5.5中,Audit API已添加到服务器。我相信你真正想要的是一个审计插件。详情请参阅http://dev.mysql.com/doc/refman/5.5/en/writing-audit-plugins.html。
- 1. 获取用户有权访问的数据库列表
- 2. 查找用户帐户访问数据库中的表格
- 3. 用户无权访问AnalysisServices数据库
- 4. 如何用C#获得访问MDB数据库表的列表
- 5. 访问用户的数据
- 6. 用户无法访问SQL Server中的用户数据库。只能访问系统数据库
- 7. 如何获取数据库列表和有权访问MySQL的用户
- 8. 实施访问控制列表vs使用数据库角色和用户
- 9. 多个用户访问数据库表行预防
- 10. 访问客户端WebSQL数据库
- 11. 访问用户数据
- 12. 使用访问数据库
- 13. 数据库数据访问
- 14. 访问被拒绝用户'用户'@'%'到数据库'db'
- 15. 数据库访问
- 16. 访问数据库
- 17. 访问数据库
- 18. 从excel用户表单提交数据到密码保护访问数据库
- 19. DreamFactory - 访客用户设置为仅访问数据库服务
- 20. 在没有数据库的ASP.NET中访问用户数
- 21. 检查特定用户可访问的存储库列表
- 22. 动态访问用户函数内的另一个数据库中的表
- 23. 访问数据列表中的控件
- 24. 访问列表框中的数据
- 25. 无法访问SQL数据库表,但可以访问同一数据库上的其他数据库
- 26. 一个或多个用于SQLServer访问的数据库用户
- 27. EntityFramework:使用用户定义的访问数据库类型
- 28. 保护用户PC上的应用程序数据库访问
- 29. 添加列表框的所有项目以访问数据库
- 30. 来自数据库的ASP MVC访问下拉列表
这只会显示当前正在运行的查询 - 而不是以前谁访问过数据库。 – 2011-04-07 02:44:17
啊。我错过了。没有办法看到真正注销的用户,只能看到当前登录的用户(即使他们没有运行查询,他们仍会打开连接)。如果您想跟踪所有人已经登录,您可能需要创建一个cron作业,将该信息定期捕获到表中,然后您可以查询该表。 – squawknull 2011-04-07 02:46:41
您也可以使用常规查询日志 - http://dev.mysql.com/doc/refman/5.1/en/query-log.html。您可以将其配置为登录到可以直接查询的表格。 – squawknull 2011-04-07 02:48:16