python3连接数据库mysql_Python3隧道连接MySQL数据库

本文介绍如何在本地通过SSH隧道连接有IP限制的MySQL数据库,使用pymysql和sshtunnel库,详细步骤包括安装依赖、构建隧道连接、配置数据库登录信息和开始连接。

有些时候,出于数据安全的考量,我们会对某些数据库的访问权限做一些限制,比如说我们可能会仅提供给某几台内网机器数据库访问权限,这时这几台机器就在我们数据库的IP白名单中,这些IP之外的机器均无法访问我们的数据库。

数据安全得到了保障,但是我们进行一些本地开发的时候可能会不太方便。尤其是出于稳定性考虑,服务器的软件版本往往较为落后,且软件丰富程度、可定制程度都无法跟本地相提并论。在数据探索阶段,我们往往更倾向于使用本地更新、更强大、更丰富的软件包来完成任务。

我们今天的目标就是在本地通过隧道的方式登录有IP限制的MySQL数据库。

这种方法的原理很简单,就是我们需要一台在IP白名单中的机器的登录用户名及密码,这样我们就可以伪装成这一台机器来访问数据库的数据,并将数据取回本地进行使用。

接下来开始我们的尝试。

欢迎大家关注我的个人博客【数洞】 【备用站】

一、安装依赖

我们需要用到pymysql和sshtunnel两个库来实现隧道连接MySQL数据库。pymysql用于实现MySQL数据库操作,sshtunnel则用于构建隧道对象。当然,也存在其他替代的库,大家可以自行搜索安装,我们今天所有的演示均使用这两个库。

# dain @ DAINdeMacBook-Pro in ~ [14:59:30]

$ pip install pymysql sshtunnel

Requirement already satisfied: pymysql in ./anaconda3/lib/python3.6/site-packages (0.9.2)

Requirement already satisfied: sshtunnel in ./anaconda3/lib/python3.6/site-packages (0.1.4)

Requirement already satisfied: cryptography in ./anaconda3/lib/python3.6/site-packages (from pymysql) (2.2.1)

Requirement already satisfied: paramiko>=1.15.2 in ./anaconda3/lib/python3.6/site-packages (from sshtunnel) (2.4.2)

Requirement already satisfied: idna>=2.1 in ./anaconda3/lib/python3.6/site-packages (from cryptography->pymysql) (2.7)

Requirement already satisfied: asn1crypto>=0.21.0 in ./anaconda3/lib/python3.6/site-packages (from cryptography->pymysql) (0.24.0)

Requirement already satisfied: six>=1.4.1 in ./anaconda3/lib/python3.6/site-packages (from cryptography->pymysql) (1.11.0)

Requirement already satisfied: cffi>=1.7 in ./anaconda3/lib/python3.6/site-packages (from cryptography->pymysql) (1.11.5)

Requirement already satisfied: pyasn1>=0.1.7 in ./anaconda3/lib/python3.6/site-packages (from paramiko>=1.15.2->sshtunnel) (0.4.4)

Requirement already satisfied: pynacl>=1.0.1 in ./anaconda3/lib/python3.6/site-packages (from paramiko>=1.15.2->sshtunnel) (1.3.0)

Requirement already satisfied: bcrypt>=3.1.3 in ./anaconda3/lib/python3.6/site-packages (from paramiko>=1.15.2->sshtunnel) (3.1.4)

Requirement already satisfied: pycparser in ./anaconda3/lib/python3.6/site-packages (from cffi>=1.7->cryptography->pymysql) (2.18)

由于我已经安装了这两个库,所以跟你看到的提示可能不太一样。

二、构建隧道连接对象

server = SSHTunnelForwarder(

ssh_address_or_host = ('隧道机器IP', 22),

ssh_username = '隧道机器用户名',

ssh_password = '隧道机器密码',

remote_bind_address = ('数据库地址', 3306)

)

# 启动隧道服务

server.start()

三、配置数据库登录信息

mysql_config = {

'user': '数据库用户名',

'passwd': '数据库密码',

'host': '127.0.0.1',

'port': server.local_bind_port,

'db': 'Database名字'

}

这里需要注意的地方是,我们要将host和port部分调整为本地的监听端口。我们上述配置的server隧道对象有一个local_bind_port属性,它告诉我们它在本地的哪一个端口监听,所有发送到这一端口的请求都会被他自动通过隧道机器访问。

四、开始连接

# 连接数据库

connect = pymysql.connect(**mysql_config)

cursor = conn.cursor()

# 查询并打印数据

cursor.execute('SELECT * FROM testdb.testtable LIMIT 10')

print(cursor.fetchall())

好了,这样我们就成功实现了本地访问有IP限制的MySQL数据库,开始我们的数据探索吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值