1

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

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

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

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

4

1 回答 1

1

任何 MySQL 用户都可以访问SELECTon 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              |
+--------------------+

从相关文档:

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

于 2012-04-11T01:04:23.807 回答