Zend Framework,访问被拒绝到我的数据库,但只在某些Wi-Fi连接下?

And*_*rew 0 mysql database-connection zend-framework zend-db

这是我第二次注意到这一点......

我正在我的笔记本电脑上运行我的Zend Framework应用程序,但是连接到我的远程数据库.它大部分时间都可以正常工作(从家里和其他地方).但这是我第二次从我的应用程序收到错误消息:

SQLSTATE[28000] [1045] Access denied for user 'databaseuser'@'some.ip.address.here' (using password: YES) 
Run Code Online (Sandbox Code Playgroud)

唯一改变的是我的Wi-Fi连接.现在,这个消息一直弹出这个Wi-Fi连接,但是一旦我在另一个连接上,我就不会得到这个消息了.但是,我注意到在生产服务器上运行应用程序并通过Wi-Fi访问它时也发生过这种情况.

这对我的申请意味着什么?我怎样才能防止这种情况发生?

Bil*_*win 5

MySQL权限通常根据客户端主机的每个用户每个IP地址授予(从数据库的角度来看,客户端是运行PHP应用程序的主机).

您的Wi-Fi路由器可能正在为您的笔记本电脑分配DHCP的IP地址,因此无法保证每次更新连接时它都会向您的笔记本电脑授予相同的地址.

我看到两种可能的补救措施:

  1. 有些路由器允许您将特定的IP地址绑定到给定的MAC地址,这样一台PC就可以可靠地获得相同的IP地址(这就是我在家庭网络上所做的事情).

  2. 或者,您可以使用GRANT语句在数据库服务器上打开权限,以便路由器所服务的DHCP地址范围内的任何IP地址都可以访问数据库.例:

    GRANT ALL ON test.* TO 'databaseuser'@'192.168.1.%' IDENTIFIED BY 'databasepassword';
    
    Run Code Online (Sandbox Code Playgroud)

    但是,您希望授予对任何 IP地址的开放访问权限,因为更广泛的网络上的任何人都可能与您的数据库服务器联系.


更新: 当然192.168.1.%是您在防火墙后面使用的内部子网.这只是一个示例,表明您可以在GRANT语句中提供的地址中使用通配符作为任何八位字节.

如果您从家中进行连接,则可能只有一个外部IP地址可供您的Internet提供商分配,但这可能会经常更改,具体取决于其网络管理策略.您可以选择获取保证不会更改的静态IP地址,但这通常会花费更多.

当然,如果您从咖啡店或机场或其他任何地方连接,您的连接将显示为其外部IP地址.

当然,打开MySQL权限是最灵活的,这样任何来自任何IP地址的客户端都可以连接(假设他们知道用户名和密码).但该计划的问题在于任何IP地址的客户端都可以连接 - 即使不是你.