Mysql CREATE DEFINER

10
我已经创建了一个运行在CentOS Web服务器上的内部网站应用程序,该应用程序使用另一台本地服务器(始终是CentOS)作为MySQL数据库。
在数据库中,我创建了类似于以下内容的常规操作:
CREATE DEFINER='localuser02'@'192.168.0.5' PROCEDURE 'Createuser'

IP地址192.168.0.5是安装应用程序的服务器的IP地址。

目前为止,一切都很好,应用程序正在运行。 现在几天之前,由于运行应用程序的服务器是一台旧服务器,我考虑添加另一台服务器(即普通服务器),我的想法是在它们之间做负载均衡。

现在,我已经正确设置了两台服务器来运行应用程序,但问题在于SQL DEFINER只有一个IP地址。

我的服务器现在是192.168.0.5和192.168.0.6。

从理论上讲,我的新DEFINER应该像这样:

CREATE DEFINER='localuser02'@'192.168.0.5, 192.168.0.6' PROCEDURE 'Createuser'

但是我不知道该如何继续。


感谢您的回答。

通配符我理解为使用百分号,就像您所说的192.168.%或者像eggyal建议的192.168.0.%。我的问题和担忧是,如果我这样做,它会起作用吗?因为我的网络分布如下:

192.168.0.1 - router
192.168.0.2 - voip phone
192.168.0.3 - voip phone
192.168.0.4 - firewall
192.168.0.5 - Server 01
192.168.0.6 - Server 02
192.168.0.7 - SQL Server
192.168.0.8 - LAN Printer
192.168.0.9 - First pc
192.168.0.10 - Second pc

我的问题是,如果我在SQL中添加通配符并保留IP地址从192.168.0.1到xxx.10,是否会与地址发生冲突,我的意思是DEFINER会尝试验证例如voip电话、打印机或防火墙,而不是仅限于两个服务器?
另外第二个问题是,是否有可能列出多个IP以使其更整洁,例如: CREATE DEFINER='localuser02'@'192.168.0.5, 192.168.0.6' PROCEDURE 'Createuser' 提前致谢。

1
DEFINER 简单地指“拥有”该存储过程的用户;如果使用 SQL SECURITY DEFINER 定义了该存储过程,则不论调用者是谁,它都将以该帐户权限运行。DEFINER 凭据应与有效的用户帐户匹配,其主机部分指示用户可以连接的机器。因此,在这种情况下,没有特定的需要更改 DEFINER;但是,如果您希望启用 localuser02 帐户从任何机器连接,可以更改其凭据以使用通配符:@'192.168.0.%' - eggyal
嗨,Eggyal,感谢您的答复。从我的理解来看,如果我说错了,请纠正我,该过程将在用户从Server 01或Server 02使用应用程序时工作,对吗?我的意思是,在两个服务器上,应用程序都会在数据库上执行查询和调用,因此,在这种情况下,如果我只使用一个IP,即第一个服务器192.168.0.5,那么在Server 02(192.168.0.6)上使用应用程序的用户会工作吗?我的意思是,如果我在过程中添加第一个服务器的IP,Server 02的用户将在Server 01上进行身份验证?谢谢 - Marcos Lamba
通配符方面我有一个问题,因为在我的网络中,192.168.0.7到192.168.0.10被其他PC占用,而192.168.0.2到192.168.0.3被VoIP电话和打印机使用,理论上SQL将搜索我的网络中被其他PC使用的IP地址,并会导致错误?我能否在CREATE DEFINER中添加两个逗号分隔的IP地址?谢谢。 - Marcos Lamba
1个回答

8

DEFINER子句控制在执行时使用的帐户,除非您还指定SQL SECURITY INVOKER。根据您当前编写的代码,无论哪个用户在运行时执行代码,它都将在DEFINER中指定的安全上下文下执行。如果您需要为定义者指定更广泛的地址范围,请仅在主机部分使用%,或使用类似于192.168.%的内容。


我添加了通配符,现在的问题是当用户连接到Server01时一切正常,但当他切换到Server02时,应用程序会将用户发送到登录页面,就像他没有登录一样。我使用RoundRobin来平衡两个服务器,但似乎用户只能在一个服务器上进行身份验证一次。如何实现用户可以在登录后独立地在两个服务器上工作?现在在数据库中我有192.168.0.%。 - Marcos Lamba
这更像是应用程序代码问题,而不是MySQL DEFINER问题,对吧?应用程序的URL从一个IP地址到另一个IP地址是否会发生变化? - udog
马可斯,你这个问题解决得怎么样了? - udog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接