共享主机是否授予对INFORMATION_SCHEMAs的访问权限?

时间:2012-04-11 00:57:18

标签: php mysql hosting information-schema

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

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

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

?可以是一个参数(我正在使用PDO),但是如果我想将field作为一个变量呢?由于PDO不支持,我可以使用信息模式中的数据来确定该列是否存在...

1 个答案:

答案 0 :(得分:1)

任何MySQL用户都可以访问SELECT information_schema,因为用户必须能够阅读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。