我正在使用 MySQL,我需要创建一个可以从本地主机或其他服务器(即 10.1.1.1)连接的帐户。因此,我正在执行以下操作:
CREATE USER 'bob'@'localhost' IDENTIFIED BY 'password123';
CREATE USER 'bob'@'10.1.1.1' IDENTIFIED BY 'password123';
GRANT SELECT, INSERT, UPDATE, DELETE on MyDatabse.* to 'bob'@'localhost', 'bob'@'10.1.1.1';
这可以正常工作,但是有没有更优雅的方法来创建一个链接到多个 IP 的用户帐户,或者是否需要以这种方式完成?
我主要担心的是,将来只会更新一个“bob”帐户的权限,而不会更新另一个帐户的权限。
答案1
如果您想要限制到主机,并且不想使用子网或通配符进行指定%
,那么这是唯一的方法。更多详细信息请参阅MySQL 文档。
我仍在尝试寻找方法来消除管理大型 MySQL 安装的身份验证时的开销,但尚未找到完美的解决方案。
答案2
让我们首先在 MySQL shell 中创建一个名为“chaminda”的新用户:
CREATE USER 'chaminda'@'%' IDENTIFIED BY 'password';
首先要做的是向用户提供必要的权限,这里我已将所有权限授予特定用户。
GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'%';
重新加载所有特权。
FLUSH PRIVILEGES;
如果您想允许特定用户使用 IP 范围,请使用以下方法:10.1.1.%
GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'10.1.1.%';
笔记: 此处主机名 = %,这意味着您可以从任何主机访问此数据库服务器。将所有权限授予用户是一个很大的风险,这不是最佳做法。此外,您可以将用户“chaminda”替换为“bob”。
答案3
您可以通过在用户规范中使用 CIDR 范围(以“网络”/“网络掩码”表示法)来细化 Warner 的答案,例如:
创建用户'bob'@'10.0.0.0/255.0.0.0',由'password123'识别;
创建用户“bob”@“192.168.0.0/255.255.255.192”,由“password123”识别;
这种构造允许更细粒度的访问控制。Warner 的答案将允许用户“bob”从网络上的任何主机(或公共互联网上的任何主机,如果您的服务器暴露在公共网络中)进行连接,这可能并不适合所有用例。
实施“纵深防御”是一种公认的做法,它通过限制用户仅从所需和受信任的主机地址进行访问来进一步实现。另外,请记住通过在基于主机的防火墙(例如 iptables、firewalld 等)中反映所需和受信任的主机地址来限制主机级别的传入连接。
答案4
MySQL 允许一行中有多个通配符。一个可能的解决方案是将用户的 Host 设置Bob
为
locahost/10.1.1.1
参考:
http://dev.mysql.com/doc/refman/5.1/en/connection-access.html