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