我想允许john mysql用户使用LOAD DATA命令。所以我以root身份登录mysql终端并发出以下语句:
GRANT FILE ON johndatabase.* TO 'john'@'localhost';
字符串
但我得到了以下错误:
错误1221(HY000):DB GRANT和GLOBAL PRIVILEGES的用法不正确
如果我用*.*
替换johndatabase.*
,那么一切都正常。但是*.*
不是意味着所有数据库吗?我想把john mysql用户限制为johndatabase。
3条答案
按热度按时间p8h8hvxi1#
你不能只在一个数据库上授予FILE权限。这在逻辑上没有任何意义。考虑一下文档是怎么说的:
FILE权限允许您使用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句以及LOAD_FILE()函数读取和写入服务器主机上的文件。具有FILE权限的用户可以读取服务器主机上的任何文件,这些文件可以是全局可读的,也可以是MySQL服务器可读的。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。
因此,FILE权限是一个 global 权限。它影响服务器上的所有文件,并且只允许访问全局命令(例如
LOAD DATA INFILE
等),而不限于任何数据库。授予FILE权限的唯一方法是在所有数据库上,使用以下语法:字符串
j2qf4p5b2#
使用FILE权限,您给予一个用户对mysql服务器可以访问的文件系统的访问权限。因此,将其限制在特定的数据库是无用的,因为用户将能够访问文件系统级别的所有数据库。这就是为什么,它只能在
*.*
上设置。5fjcxozz3#
您应该对所有数据库(
*.*
)中的所有表授予FILE,如下所示:字符串
实际上,医生在下面说:
因为任何静态全局特权都被认为是所有数据库的特权,...
而且,您不能给予
FILE
特权,因为存在错误,如下所示,在所有数据库(*.person
)中仅对一个表(例如person
)授予FILE
特权:型
因此,我们需要在所有数据库(
*.*
)中的所有表上授予静态全局权限,如FILE,PROCESS,REPLICATION SLAVE等,如下图所示,否则会出现错误:型