37

我想为 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。

4

2 回答 2

62

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

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

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

GRANT FILE ON *.* TO 'john'@'localhost';
于 2012-11-25T15:06:48.927 回答
0

使用 FILE 权限,您可以授予用户访问 mysql 服务器可以访问的文件系统的权限。因此,将其限制为特定数据库是没有用的,因为用户将能够访问文件系统级别的所有数据库。这就是为什么,它只能设置为*.*

于 2012-11-25T15:07:29.560 回答