我想允许John mysql用户使用LOAD DATA命令。所以我以root用户身份登录mysql终端并发出以下语句:
grant file on johndatabase.* to 'john'@'localhost';
但我收到以下错误:
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
如果将替换johndatabase.*为*.*,则一切正常。但这并不*.*意味着所有数据库吗?我想将john mysql用户限制为johndatabase。
johndatabase.*
*.*
您不能仅在单个数据库上授予FILE特权。从逻辑上讲这没有任何意义。考虑一下文档怎么说:
FILE特权授予您使用LOAD DATA INFILE和SELECT … INTO OUTFILE语句以及LOAD_FILE()函数在服务器主机上读写文件的权限。具有FILE特权的用户可以读取服务器主机上世界上可读的或MySQL服务器可读的任何文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)
因此,FILE特权是 全局 特权。它会影响服务器上的所有文件,并且仅允许访问全局命令(例如LOAD DATA INFILE等等),而不能访问任何数据库。授予FILE特权的唯一方法是使用以下语法在所有数据库上:
LOAD DATA INFILE
GRANT FILE ON *.* TO 'john'@'localhost';