一尘不染

仅在一个数据库上授予文件

mysql

我想允许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。


阅读 259

收藏
2020-05-17

共1个答案

一尘不染

您不能仅在单个数据库上授予FILE特权。从逻辑上讲这没有任何意义。考虑一下文档怎么说:

FILE特权授予您使用LOAD DATA INFILE和SELECT … INTO
OUTFILE语句以及LOAD_FILE()函数在服务器主机上读写文件的权限。具有FILE特权的用户可以读取服务器主机上世界上可读的或MySQL服务器可读的任何文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)

因此,FILE特权是 全局 特权。它会影响服务器上的所有文件,并且仅允许访问全局命令(例如LOAD DATA INFILE等等),而不能访问任何数据库。授予FILE特权的唯一方法是使用以下语法在所有数据库上:

GRANT FILE ON *.* TO 'john'@'localhost';
2020-05-17