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

Joh*_*ohn 31 mysql

我想为john mysql用户允许LOAD DATA命令.所以我以root身份登录mysql终端并发出以下声明:

grant file on johndatabase.* to 'john'@'localhost';
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
Run Code Online (Sandbox Code Playgroud)

如果我换johndatabase.**.*,那么一切正常.但并不*.*意味着所有数据库?我想将john mysql用户限制为johndatabase.

Ben*_*Lee 53

您不能仅在单个数据库上授予FILE权限.这在逻辑上没有任何意义.考虑一下文档说的内容:

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

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

GRANT FILE ON *.* TO 'john'@'localhost';
Run Code Online (Sandbox Code Playgroud)