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

时间:2012-11-25 15:00:59

标签: 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。

2 个答案:

答案 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服务器可以访问的文件系统的权限。因此,将它限制到特定数据库是没用的,因为用户将能够访问文件系统级别的所有数据库。这是因为它只能在

上设置