如何为整个子网授予对MySQL的远程访问权限?

时间:2012-07-31 14:57:34

标签: mysql grant

我可以使用以下代码轻松授予对一个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。*远程访问数据库。

我该怎么做?

8 个答案:

答案 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)

在连接服务器并要在主机上进行连接之后,应执行以下步骤:

  1. 编写 mysql 以打开mysql
  2. GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect' ;
  3. 按Control键和X键从mysql退出
  4. nano /etc/mysql/my.cnf
  5. 在my.cnf文件夹中的 bind-address = 127.0.0.1 之前写##
  6. #bind-address = 127.0.0.1
  7. 使用Control + X保存my.cnf文件夹
  8. service mysql restart
  9. 您可以通过主机上的navicat连接

答案 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 ...