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

2023年 8月 31日 60.8k 0

当您使用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地址:

<code >(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';

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论