从虚拟机访问主机网络上的 SQL 服务器

Accessing a SQL Server on host's network from a virtual machine

我的公司有一个设置,其中有一个 Microsoft SQL 服务器可以在我们的本地网络(无法访问互联网)上访问,我可以从我的普通工作站访问它(运行 Windows 10).我在这个工作站上安装了一个 Ubuntu 虚拟机和 Virtualbox,这个虚拟机作为我的主要开发平台。我想

我该如何设置?我无法控制 SQL 服务器(但我可能可以甜言蜜语地说服工程师进行一些小改动),但我可以控制主机并完全控制来宾。虚拟网络应该是 NAT 还是桥接?

有关 VMware 上 NAT 和桥接网络之间的差异,请参阅 this question。对于 Virtualbox,它们应该是相同的。

基本上,桥接网络对网络运行方式的限制比 NAT 少。因此,如果您可以从主机访问 SQL 服务器,您将可以从具有桥接网络的访客那里获得相同的访问权限。

回答我自己的问题以防其他人遇到同样的问题。以下是在 Windows 主机上的 NAT 配置中使用 Ubuntu 客户端进行测试的。我强烈建议在 Linux 客户端和 Windows 主机上使用相同的用户名。

我按照这个出色的指南找到了大部分解决方案:http://www.easysoft.com/products/data_access/odbc-sql-server-driver/kerberos.html

您可以通过查找本地 DNS 服务器 nmcli dev show | grep DNS(对我有用)找到密钥分发中心 (KDC),否则请咨询您当地的 IT 部门。

在 Windows 主机上 - 应该可以访问 SQL 服务器 - 您可以通过在 Windows 中输入 setspn -L 来列出服务器主体名称 (SPN)命令提示符。

我使用了 Microsoft 自己的 ODBC 驱动程序而不是 EasySoft 驱动程序:https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server。确保还安装了 unixODBC。

请记住,在 /etc/krb5.conf.

中配置 kerberos 时,域应该全部大写(出于我不完全理解的原因)

关于 为 Kerberos 身份验证配置 SQL 服务器 ODBC 数据源 部分,您可以使用在添加的 /etc/odbcinst.ini 中指定的驱动程序名称安装 Microsoft ODBC 驱动程序时。我的 odbcinst.ini 看起来像这样

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1
UsageCount=1

所以 /etc/odbc.ini 应该是这样的(请参阅 Easysoft 指南了解 windowsmachinespn 的含义)

[mssql-kerberos-dsn]
Driver                  = ODBC Driver 13 for SQL Server
Server                  = windowsmachine
ServerSPN               = spn
Trusted_Connnection     = yes

注意附加行 Trusted_Connnection。这使得数据源使用起来稍微方便一些。

在测试设置之前,您必须 运行 kinit 并按照 Easysoft 指南中的说明使用您的 Active Directory 凭据登录。然后您可以使用 `

测试连接
sqlcmd -D -S mssql-kerberos-dsn

如果您安装了 sqlcmd(参见 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)。

此外,您可以通过 运行ning

测试它是否适用于 pyodbc
import pyodbc 
print(pyodbc.connect('DSN=mssql-kerberos-dsn'))

来自 python 终端。

对我来说,更简洁的方法是安装 ubuntu 作为主机并使用 docker 来托管您的 SQL 服务器。另外,寻找如何加入 ubuntu 到 windows AD。它将帮助您配置用户。