我想知道共享主机是否通常向其用户授予对该表的访问权限。
依靠它从脚本中快速获取当前数据库结构可以吗?
我的想法是使用这些信息来清理输入 lol。例如:UPDATE table SET field = ?
?
可以是一个参数(我正在使用 PDO),但是如果我想创建field
一个变量呢?由于 PDO 不支持这一点,我可以使用信息模式中的数据来确定该列是否存在......
我想知道共享主机是否通常向其用户授予对该表的访问权限。
依靠它从脚本中快速获取当前数据库结构可以吗?
我的想法是使用这些信息来清理输入 lol。例如:UPDATE table SET field = ?
?
可以是一个参数(我正在使用 PDO),但是如果我想创建field
一个变量呢?由于 PDO 不支持这一点,我可以使用信息模式中的数据来确定该列是否存在......
任何 MySQL 用户都可以访问SELECT
on 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。