美文网首页
Python3隧道连接MySQL数据库

Python3隧道连接MySQL数据库

作者: 老Q在折腾 | 来源:发表于2018-11-26 11:45 被阅读0次

    有些时候,出于数据安全的考量,我们会对某些数据库的访问权限做一些限制,比如说我们可能会仅提供给某几台内网机器数据库访问权限,这时这几台机器就在我们数据库的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数据库,开始我们的数据探索吧。

    相关文章

      网友评论

          本文标题:Python3隧道连接MySQL数据库

          本文链接:https://www.haomeiwen.com/subject/qhzvqqtx.html