假设我的 UNIX 机器上有两个用户 - user1 和 user2。我还有两个 MySQL 数据库 - db1(mysql_user1) 和 db2(mysql_user2)。
我想阻止 user1 连接到 db2,即使它使用 mysql_user2 凭据。我希望可以做到这一点。
答案1
如果你确实想这样做,你可以运行两个单独的 MySQL 实例,每个数据库一个。然后
- 停止通过套接字与 MySQL 的连接,并要求它们全部通过网络接口进行;我们假设数据库 1 的监听器在端口 3307 上,数据库 2 的监听器在端口 3308 上(MySQL 通常在 3306 上监听)。
- 阻止用户 1 拥有的进程连接到数据库 2 的 TCP 侦听器,使用以下命令:
iptables -A OUTPUT -p tcp --dport 3307 -o lo -m owner --uid-owner user1 -j REJECT
我并不提倡这样做但是如果你真的想让用户甚至无法与错误的数据库对话,更不用说对其进行身份验证,那么这应该可行。
答案2
如果凭证被泄露,就无法阻止用户 2 有权访问的任何内容。