使用 Python 通过 VPN 连接到数据库

时间:2021-01-13 01:30:43

标签: python sql-server python-3.x vpn

我希望通过 Python 中的 VPN 访问 SQL 数据库。

一切都在服务器端配置好了。我可以在笔记本电脑上使用 Visual Studio,配置 ODBC 驱动程序并设置 ODBC 数据源,并且我能够使用 WatchGuard Mobile 作为 VPN 客户端(使用凭据)从该设置访问该数据库。

就 Python 而言,我应该能够使用包 pyodbc 连接到数据库,但我不确定首先如何连接到 VPN。我已经看过包 openvpn-apisocket,但我不熟悉这些,因此不确定它们是否真的是我应该查看的以解决该问题的包。

我只去过

import openvpn_api

v = openvpn_api.VPN(HOST, PORT)                                                                                                      
v.connect()

## Output
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ec2-user/environment/openvpn-api/openvpn_api/vpn.py", line 73, in connect
  raise errors.ConnectError(str(e)) from None
openvpn_api.util.errors.ConnectError: timed out

import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

s.recv(1024)

## Output
b'HTTP/1.1 400 Bad Request\r\nDate: Tue, 12 Jan 2021 18:59:29 GMT\r\nContent-Type: text/html\r\nContent-Length: 138\r\nConnection: close\r\n\r\n<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body bgcolor="white">\r\n<center><h1>400 Bad Request</h1></center>\r\n</body>\r\n</html>\r\n'

如果您提供有关 socket + pyodbc 方法是否合理的任何反馈,以及有关 socket 或更合适的包以连接到 VPN 的任何帮助或资源,我将不胜感激。< /p>

1 个答案:

答案 0 :(得分:1)

我认为您根本不需要在 Python 中与 VPN 交互。您应该能够使用安装在笔记本电脑上的单独 VPN 客户端连接到 VPN。我假设此 VPN 连接允许您访问 SQL Server 所在的网络。

一旦您通过 VPN 客户端连接到 VPN,您的笔记本电脑应该能够访问 SQL Server,并且您可以通过 ODBC 连接到它。

import pyodc

server = 'YourSQLServerName'
driver = '{ODBC Driver 11 for SQL Server}'          # depends on what driver you have installed
database = 'YourSQLDatabaseName'

# pyodbc can also list the ODBC you have installed
# drivers = pyodbc.drivers()

# trusted_connection will use your local credentials
##assuming a separate username and password isn't required (security is provided by the VPN)

connection = pyodbc.connect(driver=driver, server=server, database=database, trusted_connection='yes')

cursor = connection.cursor()