拒绝访问 MariaDB 中的 information_schema

Posted

技术标签:

【中文标题】拒绝访问 MariaDB 中的 information_schema【英文标题】:Deny access to information_schema in MariaDB 【发布时间】:2021-10-15 21:02:59 【问题描述】:

我正在寻找最好的方法来拒绝用户访问 Maria DB 中的 information_schema。默认情况下,每个用户都有权访问 information_schema,但只能看到表中与用户具有适当访问权限的对象对应的行。

我也想阻止它!,以提供更好的安全性来避免 SQL 注入。请让我知道我们如何实现这一目标。

revoke select on information_schema.* from mu@localhost;

这也不起作用,因为即使对于 root 用户,我也会收到拒绝访问错误。

错误 1044 (42000):拒绝用户 'root'@'localhost' 访问数据库 'information_schema'

我对任何可以阻止访问的解决方案持开放态度,无论是在数据库端还是防火墙端。主要目的是为 SQL 注入威胁做好准备。

【问题讨论】:

无法访问信息架构如何防止 SQL 注入威胁? 抱歉,让我说得更具体一些。我知道它不会完全停止 SQL 注入,但它仍然会造成进一步的损害。我问它比什么都重要,因为有一种 sql 注入方法,可以查询同一个表以获取有关它的信息,进行数据库映射。我只是想避免它。我知道这不是一个完整的解决方案,但如果你能提出一种方法,那它真的很有帮助。 根据我对 SQL 注入的了解,您必须在 SQL 到达数据库之前完全阻止这种情况。当恶意行为者到达 information_schema 表时,如果你试图阻止它,我认为这场战斗已经失败了。在某些情况下可能更愿意阻止它,但我真的想不出任何这样的情况。 【参考方案1】:

感谢您的回复比尔!

是的,你是对的,为此我通过使用 proxySQL 找到了解决方案。在使用正则表达式创建规则后,我对其进行了测试,它按预期工作。下面是他们官方文档的链接。

https://proxysql.com/

【讨论】:

阻止对 INFORMATION_SCHEMA 的访问意味着用户无法检索有关 creation_time 的信息,其他所有内容都可以通过SHOW CREATE TABLE 或通过检查元数据来检索。编写过滤规则来撤销对信息模式的完全访问即使不是不可能也相当复杂,因为您需要复杂的过滤,这不会降低 SQL 注入的风险。 我想任何数量的其他工作都比实际修复代码中的漏洞更可取?【参考方案2】:

您无法撤消对 INFORMATION_SCHEMA 的访问权限。如果用户有权查询表,则他们隐式有权查询有关这些表的元数据。

为了防止 SQL 注入攻击,您应该修复客户端代码中的漏洞。例如,在格式化动态 SQL 查询时使用参数化查询而不是字符串连接。

【讨论】:

以上是关于拒绝访问 MariaDB 中的 information_schema的主要内容,如果未能解决你的问题,请参考以下文章

mariadb 拒绝与家庭网络中的笔记本电脑连接

MariaDB:每次重启后访问被拒绝

Confluence 的 MariaDB 设置“用户访问被拒绝”

Mariadb 连接客户端:mysql 8.0 上的用户访问被拒绝(使用密码:否)

Homebrew Mariadb Mysql 安装 root 访问被拒绝

使用 mariadb 10.4.8 docker 容器的用户“root”@“localhost”的访问被拒绝,使用 docker compose 并在附加外部卷时发出问题