我想为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。
答案 0 :(得分:52)
您无法仅在单个数据库上授予FILE权限。这在逻辑上没有任何意义。考虑一下the docs说的话:
FILE权限授予您读取和写入文件的权限 服务器主机使用LOAD DATA INFILE和SELECT ... INTO OUTFILE 语句和LOAD_FILE()函数。拥有FILE的用户 特权可以读取服务器主机上的任何文件 世界可读或MySQL服务器可读。 (这意味着用户 可以读取任何数据库目录中的任何文件,因为服务器可以 访问任何这些文件。)
因此,FILE权限是全局权限。它会影响服务器上的所有文件,并且只允许访问全局命令(例如LOAD DATA INFILE
等...),而不限于任何数据库。授予FILE权限的唯一方法是使用以下语法在所有数据库上:
GRANT FILE ON *.* TO 'john'@'localhost';
答案 1 :(得分:0)
使用FILE权限,您可以授予用户访问mysql服务器可以访问的文件系统的权限。因此,将它限制到特定数据库是没用的,因为用户将能够访问文件系统级别的所有数据库。这是因为它只能在。
上设置