【问题标题】:What does the information_schema database represent?information_schema 数据库代表什么?
【发布时间】:2011-03-04 06:35:55
【问题描述】:

我在mysql中有一个数据库。

但是当我登录 phpMyAdmin 时,它会显示另一个名为 information_schema 的数据库。

该数据库是否始终与一个数据库一起存在?

我的意思是说 mysql 中存在的每个数据库都有一个 information_schema 副本,还是每个 mysql 服务器都有一个名为 information_schema 的数据库?

如果我修改这个 information_schema 数据库,它将如何影响我当前的数据库?

【问题讨论】:

    标签: information-schema mysql5


    【解决方案1】:

    您可以将 information_schema 视为“主数据库”,其中包含有关服务器上所有其他数据库的详细信息,例如表、列和用户的名称和类型。

    什么是information_schema?

    来自the reference documentation:

    INFORMATION_SCHEMA 提供访问 数据库元数据。

    元数据是关于数据的数据,例如 作为数据库或表的名称, 列的数据类型,或访问 特权。有时会出现的其他术语 用于此信息的是数据 字典和系统目录。

    INFORMATION_SCHEMA 是信息 数据库,存储的地方 关于所有其他的信息 MySQL 服务器的数据库 保持。 INFORMATION_SCHEMA 内部 有几个只读表。 它们实际上是视图,而不是基础 表,所以没有文件 与他们相关联。

    information_schema 中存储了什么?

    您可以通过查看this diagram(适用于 MySQL 5.0)或this diagram(适用于 MySQL 5.1)来查看 information_schema 中存储的事物的种类以及它们的组织方式。

    如果我修改 information_schema 会发生什么?

    实际上,information_schema 是只读视图的集合。因此,应该不可能对其进行修改并造成任何损坏。不过,the MySQL FAQ on this topic 有话要说:

    23.7.3:我可以添加或以其他方式修改在 INFORMATION_SCHEMA 数据库?

    没有。 由于应用程序可能依赖于 一定的标准结构,这 不应修改。为了这 原因,我们不能支持错误或 导致的其他问题 修改 INFORMATION_SCHEMA 表或 数据。

    这意味着如果您发现自己能够修改 information_schema(这应该是不可能的,并且在 MySQL 中,但其他供应商的 SQL 实现可能允许)您至少应该选择不这样做。如果您可能损坏/修改 information_schema,您将损坏其他数据库的实际结构(例如表名、列类型)。

    是否每个用户都有自己的 information_schema 副本?

    每个用户都可以看到与他们有权访问的表和数据库相关的 information_schema。一些权限非常有限的用户仍会看到 information_schema,但对于任何 information_schema 查询只会看到 NULL 值。但是,重要的是要记住 information_schema 不是一个实际的数据库,而只是 SQL 提供的一种方便的方式,以便您可以选择有关数据库和表的信息。

    来自the reference documentation:

    每个 MySQL 用户都有权 访问这些表,但只能看到 表中对应的行 到用户拥有的对象 适当的访问权限。在一些 案例(例如, ROUTINE_DEFINITION 列中的 INFORMATION_SCHEMA.ROUTINES 表), 权限不足的用户 将看到 NULL。

    在哪里可以找到更多信息?

    【讨论】:

    • 但如果这是敏感数据,那么为什么作为普通用户我完全可以看到该数据库。它应该默认隐藏。不就是安全漏洞吗
    • 您不是普通用户,我想您创建了自己的数据库,从而使您成为服务器管理员。使用 phpMyAdmin 时您可能以默认 root 用户身份登录对吗?
    • 它也不保存你其他数据库的数据,只是结构,以防需要澄清。
    • 我以 root 身份登录,但当我也以普通用户身份登录时,没有任何特殊权限,我仍然可以看到 information_schema。我从一家托管公司获得了一些数据库,他们给了我我的数据库详细信息。当我登录 phpmyadmin 时,我还可以看到我的数据库以及 information_schema。然后我想它可能属于每个用户
    • 答案已更新。基本摘要:每个用户都可以看到与他们可以访问的内容相关的信息架构。如果您还有其他问题,请告诉我,如果回答了您的问题,请接受此答案。
    猜你喜欢
    • 2011-07-16
    • 2020-08-23
    • 2016-11-11
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多