【问题标题】:Do shared hosts grant access to INFORMATION_SCHEMAs?共享主机是否授予对 INFORMATION_SCHEMA 的访问权限?
【发布时间】:2012-04-23 07:40:29
【问题描述】:

我想知道共享主机是否通常会向其用户授予对该表的访问权限。

是否可以依靠它从脚本中快速获取当前的数据库结构?

我的想法是使用这些信息来清理输入 lol。例如:UPDATE table SET field = ?

? 可以是一个参数(我正在使用 PDO),但是如果我想让field 成为一个变量呢?由于 PDO 不支持,我可以使用 info 架构中的数据来确定该列是否存在...

【问题讨论】:

  • 如果您将数据放入其中,您肯定会知道数据库结构。

标签: php mysql hosting information-schema


【解决方案1】:

任何 MySQL 用户都可以访问 information_schema 上的 SELECT,因为用户必须能够读取 information_schema 才能从他所在的数据库中读取被授予访问权限。

您可以通过在单个数据库中的单个表上创建一个仅具有SELECT 权限的新用户来测试这一点。用户将能够读取information_schema 中与该数据库中已授予表相关的任何内容,但不能读取尚未授予的任何内容。

/* Create a new user with only SELECT on one db: */
GRANT SELECT ON newdb.* TO newuser@localhost IDENTIFIED BY 'passwd';

/* Login with that user and list databases */
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| newdb              |
+--------------------+

From the relevant documentation:

每个 MySQL 用户都有权访问这些表,但只能看到表中与用户具有适当访问权限的对象相对应的行。在某些情况下(例如 INFORMATION_SCHEMA.ROUTINES 表中的 ROUTINE_DEFINITION 列),权限不足的用户会看到 NULL。

【讨论】:

  • 你是说每次选择都会触发另一个从 information_schema 中选择?
  • @AnnaK。对information_schema 的访问仅限于用户拥有的授权,但为了能够从表中选择列,用户还必须能够从 information_schema 中列出这些列。
  • @AnnaK。换句话说,并不是一个查询“触发”了一个针对 information_schema 的查询,而是在编译查询时,必须咨询 information_schema 来验证它并验证用户权限。为了让用户能够有效地使用 MySQL 客户端(可以列出列、它们的类型等),所有这些都通过查询 information_schema 来完成。
  • @AnnaK。你也许可以利用它。如文档中所述,用户可以从 information_schema 中查询与他被授予访问权限的对象相关的任何内容。
猜你喜欢
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多