我正在尝试使用 SQL Server 2008 R2 Express 配置我的 VM,以便我只能从主机使用 SQL Server Management Studio 远程访问 SQL。
VM 配置
- 运行 Windows网页服务器 2008 R2
- 有两个 NIC:
- 桥接以便连接到互联网
- 仅主持,以便我可以通过虚拟网络更快地进行通信
- SQL Engine 和浏览器服务均正在运行
- 我已为 SQL Express 启用 TCP/IP 协议,但尚未配置任何 IP 地址(单独选项卡)
- 我已经添加了以下传入防火墙规则:
- 1433 TCP 端口
- 1434 UDP 端口
- 如果我查看网络连接,我会看到我的两个网卡都连接到网络。我可以将桥接网络设置为工作场所但我无法更改仅主机网络的网络类型。因此将其设置为民众默认情况下。我不确定这是否与此有关,但事实就是如此。
HOST 配置
我在主机上做的唯一一件事就是为我的虚拟机 IP 命名。我使用仅主机 IP 地址来命名。我在 HOSTS 文件中添加了一个条目。
问题
然后我在主机上打开 SSMS,如果我选择浏览更多在里面连接到服务器对话框窗口我实际上可以看到我的虚拟机的 SQL 实例。但是当我尝试连接到它时,我尝试通过以下三种方式连接时得到的结果如下:
机器名称(我的 HOSTS 文件将进行 IP 重新映射)
桥接网络 IP 地址
仅主机 IP 地址
问题 1:我还能配置什么才能访问我的虚拟机的 SQL 实例?如果可能的话,我还想配置它,以便我只能通过 Hots-only 网络访问它,而不能通过桥接网络访问它。但如果我能这样配置它,那将是一个额外的好处。
问题2:我是否真的需要运行 SQL Browser,因为据我所知,它只负责发现 SQL 实例。如果我知道 SQL 实例那里我知道它使用端口 1433,我不能直接用这个连接吗?服务器名称:
DATAVM\SQLEXPRESS,1433
编辑
这是 netstat 的结果:
我也跑了端口查询在主机上检查虚拟机上的 SQL 实例。如果我尝试桥接 IP 地址,我实际上会得到 SQL 浏览器的响应:
Starting portqry.exe -n 192.168.1.143 -e 1434 -p UDP ...
Querying target system called:
192.168.1.143
Attempting to resolve IP address to a name...
IP address resolved to Datavm
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName DATAVM
InstanceName SQLEXPRESS
IsClustered No
Version 10.50.1600.1
tcp 49159
从结果中我可以看出,我的 SQL 实例实际上正在监听 TCP 端口 49159。
因此我进入 SQL 配置并将该端口更改为 1433。
问题 3:默认情况下端口未设置为 1433 是否正常?我是否应该将其改回 49159 并更改入站防火墙规则以通过此端口,还是现在将其保留在 1433 上?
通过将端口更改为 1433我可以从主机 SSMS 连接到虚拟机。但我只能使用桥接 IP 地址来做到这一点。
据我了解,SQL 协议中的 TCP/IP 设置IP 地址应该列出所有机器的 IP 地址。我可以看到其中 5 个:
- 桥接网卡 V6 地址
- 桥接网卡 V4 地址
- 本地主机 V6(::1)
- 本地主机 V4 (127.0.0.1)
- 一些与桥接网络或仅主机网络无关的 ? V6 地址 (fe80::100:7f:fffe%12)
我认为这也是我无法使用仅主机网络连接的原因...但是我该如何配置我的虚拟机以便能够(并可能禁用桥接的虚拟机)?
答案1
解决方案
随着我对此进行深入研究,我发现这更像是一个网络问题,而不是 SQL Server 配置问题。事实也确实如此。
我已经解决了网络问题,你可以在服务器故障。这将帮助您配置虚拟主机专用网络,这样它就不会像 Windows 默认设置的那样被锁定。
但还有其他事情。那就是可以在 SQL Server 实例配置中的 TCP/IP 协议中看到的 **IP 地址。
这里的问题是,这个 IP 列表仅在您安装 SQL Server 实例时才会填充。如果您对网络适配器进行任何更改,这些更改将不会反映在 SQL Server 配置中。这是一个已知问题自 2006 年以来,但尚未解决。
在我的例子中,我添加了一个主机专用的附加 NIC,由于我的 SQL 实例已经安装,因此这些 IP 地址不会显示在配置中。事实证明,您可以手动使用注册表编辑器添加这些新的或更改的设置。
导航:
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Microsoft SQL Server
MSSQL10_50.[InstanceName]
MSSQLServer
SuperSocketNetLib
Tcp
您将在那里找到所有可以配置的 IP 地址。由于我必须添加另外两个地址,因此我导出了 IP2,然后编辑了保存的 *.reg 文件:
- 修改第一行,将IP2改为IPn(其中 n 为当前最大值 + 1)
- 更改了 IP 地址并添加了仅主机网络的 v6 IP 地址
- 复制并粘贴所有这些行
- 增加 IPn1
- 更改了 IP 地址并添加了仅主机网络的 v4 IP 地址
保存文件并将其导入注册表编辑器。然后我可以在注册表编辑器中看到另外两个 IP 地址。
打开 SQL Server 配置,是的,我现在在 TCP/IP 协议 SQL 实例配置中有两个额外的 OP 地址,我可以单独配置。
就是这样。有效。
答案2
如果我没记错的话,SQL Browser 对于命名实例来说是必需的。您的命名实例监听不同的端口(您发现的),SQL Browser 将显示该端口。您还可以使用 SQL 网络配置将您的实例配置为监听特定端口。
我发现主机到虚拟机的网络通信有时也有点令人沮丧。
您是否尝试过关闭虚拟机上的防火墙以进行测试?这通常是确定连接问题的第一步。90% 以上的连接问题都是防火墙问题。