暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] MySQL Shell 101 – 系统日志

原创 Brian Sumpter 2021-08-12
456

MySQL 8.0.24 中引入的新功能之一是能够将 MySQL Shell 中发出的所有 SQL 语句记录到系统日志中。这是一个有用的功能,可以极大地帮助跟踪谁在系统上做了什么。

用法

利用新的 Shell 日志记录功能的最简单方法是简单地启动 MySQL Shell 并启用syslog选项,如下所示:

Shell $> mysqlsh --syslog --sql root@localhost 1 $> mysqlsh --syslog --sql root@localhost

从现在开始,所有在 MySQL Shell 中输入的 SQL 都将被记录到系统日志中。例如,在 Shell 中输入以下 SQL:

MySQL localhost:33060+ ssl SQL > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+

我们现在可以检查系统日志并验证上面的语句是否确实按预期记录,以及使用的系统用户和 MySQL 用户:

$> journalctl $(which mysqlsh) Jun 28 10:01:11 localhost mysqlsh[9558]: SYSTEM_USER=brian MYSQL_USER=root CONNECTION_ID=16 DB_SERVER=localhost DB='--' QUERY='show databases;'

排除

根据 MySQL 用户手册,并非所有语句都会记录到系统日志中。基本上,出于安全原因通常会从 MySQL Shell 代码历史记录中排除的任何语句也将从系统日志中排除。我们可以通过检查 JS 模式下的 MySQL Shell 选项来验证将要排除的内容:

MySQL localhost:33060+ ssl JS > shell.options

这将列出 shell 的所有当前选项,这里的关键是history.sql.ignorePattern选项。在我们的例子中,它设置如下:

"history.sql.ignorePattern": "*IDENTIFIED*:*PASSWORD*"

因此,任何包含单词IDENTIFIED 或PASSWORD 的SQL 语句 都将被忽略,并且不会被记录到 MySQL Shell 历史记录中,即使启用了日志记录也不会记录到系统日志中。这减轻了在系统日志中以纯文本形式设置密码的任何安全问题。

默认记录

要从 MySQL Shell 自动启用系统日志记录而不必在每个运行时指定它,可以将选项设置为持久化。在 MySQL Shell 中,进入 JS 模式并设置以下选项:

MySQL localhost:33060+ ssl JS > shell.options.setPersist("history.sql.syslog",1)

从现在开始,在 MySQL shell 中输入的所有 SQL 将默认记录到系统日志中。

总结

知道谁在 MySQL Shell 中执行了什么是一个非常有用的管理工具,可以帮助跟踪问题或找出谁在给定时间发布了特定语句。虽然不是完全万无一失的审计方法(仍然可以在每个会话的基础上禁用日志记录),但它只是 DBA 工具箱的另一个项目,可以减轻当今大型数据库安装的管理负担。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论