GreatSQL社区

搜索

chongzh

MySQL Router 如何获取客户端的IP地址?

chongzh 已有 343 次阅读2023-8-30 09:39 |个人分类:Mysql Router|系统分类:运维实战

当您使用TCP代理level 7(也称为应用程序级别或第7层代理,OSI模型的最高级别)连接到服务器(或群集)时,应用程序不会直接连接到后端服务器。

使用这种代理(如HA Proxy、ProxySQL和MySQL Router)时的问题是,服务器并不真正知道客户端是从哪里连接的。服务器将代理/路由器的IP地址视为客户端的源IP。

HA Proxy最初设计了代理协议,这是一个简单的协议,允许TCP连接在客户端、代理服务器和目标服务器之间传输与代理相关的信息。代理协议的主要目的是保存客户端的原始IP地址(以及其他一些元数据)。

后端应用程序也必须知道并理解这个协议,才能从中受益。

但是,代理协议存在潜在的安全问题(如欺骗、信息泄漏、使用格式错误或非常大的代理协议头拒绝服务等)。

出于这些原因,正如您所知,安全性对我们Oracle来说非常重要,MySQL不支持代理协议。

这是否意味着如果你使用MySQL路由器,你没有办法知道客户端的IP地址?

当然不是,如果使用安全连接(SSL客户端),MySQL路由器会在握手中添加属性,这些属性在服务器上是可用的。

See Connections Attributes. https://dev.mysql.com/doc/refman/8.0/en/performance-schema-session-connect-attrs-table.html

通过这个简单的查询,现在可以列出客户端通过MySQL路由器连接时的连接和始发IP地址:

(Wed Aug 30 09:06:30 2023)[root@GreatSQL][(none)]>
select program_name, last_statement, user,attr_value 'client ip'   
  from performance_schema.session_connect_attrs   
   join sys.processlist on conn_id=processlist_id   
  where attr_name = '_client_ip';


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-5-4 07:53 , Processed in 0.014044 second(s), 8 queries , Redis On.
返回顶部