我可以使用以下代码轻松地授予对一个IP的访问权限:
$ mysql -u root -p
Enter password:
mysql> use mysql
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';
mysql> FLUSH PRIVILEGES;
但是我需要允许整个子网192.168.1。*远程访问数据库。
我怎样才能做到这一点?
Answers:
编辑:考虑在此页面上查看并认可Malvineous的答案。网络掩码是一种更为优雅的解决方案。
只需在IP地址中使用百分号作为通配符即可。
从http://dev.mysql.com/doc/refman/5.1/en/grant.html
您可以在主机名中指定通配符。例如,
user_name@'%.example.com'
适用user_name
于example.com
域中的任何主机,并且user_name@'192.168.1.%'
适用于C类子网user_name
中的任何主机192.168.1
。
GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
192.160.0.34/255.255.255.0
与192.168.0.34/24
实际上没有意义的相同(/24
意味着最后一个数字可以从0到255,忽略您的值34)。如果您为IP使用有效的掩码,是否可以正常使用192.168.0.34/255.255.255.252
?
只是我所遇到的特殊情况的记录:
考虑:
db server: 192.168.0.101
web server: 192.168.0.102
如果您在mysql.user中定义的用户'user'@'192.168.0.102'
使用password1,另一个用户'user'@'192.168.0.%'
使用password2,
然后,
如果您尝试使用密码2以“用户”身份从Web服务器连接到数据库服务器,
这将导致“访问被拒绝”错误,因为'user'@'192.168.0.102'
通配符'user'@'192.168.0.%'
身份验证使用了单个IP 身份验证。
连接服务器并要连接到主机后,应执行以下步骤:
GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
nano /etc/mysql/my.cnf
service mysql restart
受@Malvineaus的回答激励,我自己尝试了一下,发现它不适用于我。
您可以使用“ 192.168.1。%”或“ 192.168.1.0/255.255.255.0”指定子网掩码,但子网必须始终位于完整的八位字节上。参见https://mariadb.com/kb/zh-CN/create-user/#host-name-component。结果,一种规范方式与另一种规范方式之间的功能相同。
例如,“ 192.168.1.0/255.255.255.128”将无法使用,因为它不在完整的八位位组边界上。