我正在测试从 MySQL CLI(本地和远程)写入文件,我想知道是什么设置阻止了远程用户的写入,基本上我想确保它在所有服务器上设置,以防有人(开发人员)允许远程访问到 MySQL:
本地(允许写入):
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> \P cat >> /etc/passwd
PAGER set to 'cat >> /etc/passwd'
mysql> SELECT CONCAT('test:x:5000:5000::/home/test:/bin/bash');
远程(写入被拒绝):
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@% |
+----------------+
1 row in set (0.01 sec)
mysql> \P cat >> /etc/passwd
PAGER set to 'cat >> /etc/passwd'
mysql> SELECT CONCAT('test:x:5000:5000::/home/test:/bin/bash');
sh: /etc/passwd: Permission denied
我认为你对这里发生的事情感到困惑。您以 root 身份在服务器计算机上运行客户端。您可能没有在“远程”机器上以 root 身份运行客户端。即使您的查询已成功附加到 /etc/password,您也只会修改本地密码文件,而不是服务器上的文件。
寻呼机总是在
mysql
客户端运行的地方。它与MySQL服务器无关。如果本地机器(客户端运行的地方)上的用户对本地文件具有写入权限,那么他们可以通过寻呼机选项写入文件,就像他们可以用其他任何东西写入文件一样。这里没有任何与 MySQL 服务器或权限有关的内容。
现在,通过制作文件使其无法写入......
在远程机器上以 root 用户身份运行客户端,您将看到您不会被拒绝许可,但您也不会修改服务器上的任何内容——只是您的本地密码文件。
另外,是的,不要在 MySQL 中创建 'root'@'%' 帐户。
我正在浏览 MySQL 文档。文件权限可以限制
但可能对 MySQL 客户端寻呼机没有影响。
既然
root@'%'
失败了而你想root@localhost
失败,这里是你的选择选项1
root@localhost
通过执行此操作无论如何尝试禁用 FILE 权限如果您想使用LOAD DATA INFILE、SELECT ... INTO OUTFILE或LOAD_FILE() ,则必须将其放回原处。
选项 #2
尝试设置:secure_file_priv
选项 #3
给
root@'%'
一个不同的密码。当开发者登录时使用不同的密码,这可以提供限制。
确保您同时拥有
root@localhost
并且root@'%'
在mysql.user
. 通过做检查:或者,更改
root@localhost
密码。不要给开发人员新密码。选项 #4
告诉开发人员不要使用寻呼机!!!人性是最难编程的,嗯???
试试看 !!!