从虚拟机访问主机网络上的SQL Server

时间:2017-10-25 13:31:27

标签: sql-server linux virtual-machine virtualbox

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

  • 能够使用python
  • 从guest虚拟机访问SQL Server
  • 理想情况下,我还想为SQL Server使用主机的Windows身份验证,尽管这是可选的

我该如何设置?我无法控制SQL Server(但我可能会对工程师进行一些小的改动,但我可以控制主机并完全控制客户端)。虚拟网络应该是NAT还是桥接?

3 个答案:

答案 0 :(得分:0)

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

基本上,桥接网络对网络运行NAT的限制较少。因此,如果您可以从主机访问SQL Server,那么来自具有桥接网络的guest虚拟机将具有相同的访问权限。

答案 1 :(得分:0)

回答我自己的问题以防其他人遇到同样的问题。以下是在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 Server - 您可以通过在Windows命令提示符下输入setspn -L来列出服务器主体名称(SPN)。

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

请记住,在/etc/krb5.conf中配置kerberos时,域应该全部上限(出于我不完全理解的原因)。

关于为Kerberos身份验证配置SQL Server ODBC数据源部分,您可以使用在安装Microsoft ODBC驱动程序时添加的/etc/odbcinst.ini中指定的驱动程序名称。我的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并使用您的Active Directory凭据登录,如Easysoft指南中所述。然后,您可以使用`

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

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

此外,您可以通过运行

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

来自python终端。

答案 2 :(得分:0)

对我来说,更干净的方法是将ubuntu安装为主机,并使用docker托管SQL Server。另外,寻找如何将ubuntu加入Windows AD。它将帮助您配置用户。