我的公司有一个设置,在我们的本地网络上可以访问Microsoft SQL Server(无法访问Internet),我可以从我的普通工作站(运行Windows 10)访问。在这个工作站上,我安装了一个带有Virtualbox的Ubuntu虚拟机,这个虚拟机作为我的主要开发平台。我想
我该如何设置?我无法控制SQL Server(但我可能会对工程师进行一些小的改动,但我可以控制主机并完全控制客户端)。虚拟网络应该是NAT还是桥接?
答案 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的指南,了解windowsmachine
和spn
的含义)
[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)。
此外,您可以通过运行
来测试它是否适用于pyodbcimport pyodbc
print(pyodbc.connect('DSN=mssql-kerberos-dsn'))
来自python终端。
答案 2 :(得分:0)
对我来说,更干净的方法是将ubuntu安装为主机,并使用docker托管SQL Server。另外,寻找如何将ubuntu加入Windows AD。它将帮助您配置用户。