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