我可以使用以下代码轻松授予对一个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。*远程访问数据库。
我该怎么做?
答案 0 :(得分:87)
编辑:请考虑在此页面上查看和提升Malvineous的答案。 Netmasks是一个更优雅的解决方案。
只需在网址中使用百分号作为通配符。
来自http://dev.mysql.com/doc/refman/5.1/en/grant.html
您可以在主机名中指定通配符。例如,
user_name@'%.example.com'
适用于user_name
域中任何主机的example.com
,而user_name@'192.168.1.%'
适用于user_name
192.168.1
中任何主机C类子网。
答案 1 :(得分:76)
looks like you can also use a netmask,例如
GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
答案 2 :(得分:25)
您只需使用'%'作为通配符:
GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
答案 3 :(得分:12)
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
通配符是“%”而不是“*”
答案 4 :(得分:3)
只是注意到我面临的一个特点:
考虑:
db server: 192.168.0.101
web server: 192.168.0.102
如果您在mysql.user中将用户定义为'user'@'192.168.0.102'
,密码为1,另一个'user'@'192.168.0.%'
定义为密码2,
然后,
如果您尝试从Web服务器连接到数据库服务器,那么'用户'使用password2,
这将导致“访问被拒绝”#39;错误,因为通过通配符'user'@'192.168.0.102'
身份验证使用单个IP 'user'@'192.168.0.%'
身份验证。
答案 5 :(得分:0)
在连接服务器并要在主机上进行连接之后,应执行以下步骤:
GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
; nano /etc/mysql/my.cnf
service mysql restart
答案 6 :(得分:0)
由@Malvineaus回答,我自己尝试了一下,发现它对我不起作用。
您可以使用“ 192.168.1。%”或“ 192.168.1.0/255.255.255.0”指定子网掩码,但是子网必须始终位于完整的八位字节上。参见https://mariadb.com/kb/en/create-user/#host-name-component。结果,一种规范方法与另一种规范方法之间的功能相同。
例如'192.168.1.0/255.255.255.128'将无法使用,因为它不在完整的八位字节边界上。
答案 7 :(得分:0)
MySQL 8.0.23 onwards 现在也支持 CIDR 表示法。
所以,基本上:
-- CIDR Notation
GRANT ... TO 'user'@'192.168.1.0/24' IDENTIFIED BY ...
-- Netmask Notation
GRANT ... TO 'user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY ...