我已经设置了一个虚拟开发机器Windows Web 服务器 2008 R2并安装SQL Server 2008 R2 快速版我也在上面安装了。我没有在上面安装任何 SQL 工具,因为我的主机上就有这些工具。
虚拟机在 VMWare Workstation 8 上运行。
虚拟机有 2 个 NIC
- 通过桥接,其他人(测试人员)可以访问开发中的 Web 应用程序
- 仅限主机,这样我就可以与主机上的这台机器进行更快的通信
我没有运行 SQL Browser,而是直接使用机器\实例,端口名称。这样,即使 SQL 不可发现,我也可以连接到它。
我已经在防火墙上打开了SQL Engine的网络端口。
事实
我可以使用桥接 IP 地址访问我的 SQL,但不能使用仅主机 IP 地址。我已检查 SQL Express 的协议并启用了 TCP/IP,然后检查了 IP 地址选项卡,其中显示了 5 个 IP:
- 2 用于桥接网络(v6 和 v4)
- 2 用于 localhost(v6 和 v4)
- 一个与桥接网络或仅主机网络无关的 v6 IP 地址(fe80::100:7f:fffe%12)。
这在某种程度上解释了为什么我无法使用仅主机网络访问我的 SQL。即使我更改这些设置并将桥接 IP 更改为仅主机 IP,我仍然无法访问我的 SQL。
似乎主机专用网络对 SQL 不可见。尽管它可以工作。
另一个事实是,如果我从主机 ping 我的虚拟机,我会在桥接网络上得到响应,但在仅主机网络上却得不到响应。
问题
我怀疑这一定与 VM 的仅主机网络设置有关。或者可能不是。因此才有这个问题。问题当然是如何在我的 VM 上设置 SQL 服务器,以便能够通过我的主机和从本地主机访问它(因为 Web 应用程序在同一台机器上运行)?但我不希望通过桥接网络访问 SQL 服务器,这样其他人将无法访问它。
答案1
解决
好的,我已经通过配置虚拟网络和配置 SQL Server 解决了这个问题。
虚拟网络配置
我的仅主机配置设置为自动,但使用 VMWare 此网络没有应用任何网关,因此我添加了一个与 DNS 相同的默认网关(在我的情况下是 192.168.100.254)。
这使得 Windows 网络能够将网络识别为私有网络而非公共网络。这意味着某些安全级别将以不同的方式应用于该网络。
现在,我可以单向或双向 ping 任一机器(从主机到 VM 客户机,反之亦然)。两次 ping 都有响应,而之前没有,因为网络被标记为公共网络。
SQL Server 配置
配置 SQL Express 实例的协议并配置 TCP/IP 设置,并在第一个选项卡(协议)上设置收听全部到不这意味着我必须在第二个 tba(IP 地址)上配置单独的 IP,我已经已启用两个本地主机 IP(v4 和 v6),并且更改了 v4 IP 地址,以便它反映仅虚拟主机网络的 IP 地址:
- 放IP地址至仅主机网络地址
- 放已启用到是的
然后清除这三个IP地址TCP 动态端口并设置静态TCP 端口到1433我想使用。
瞧,它起作用了
现在我回到主机并尝试首先使用桥接 IP 地址将 SSMS 连接到我的虚拟机。失败了。然后,作为第二次尝试,我使用了仅主机 IP 地址,并且我能够连接到我的 SQL Server 实例。成功。
这将我的 SQL Server 实例完全锁定到本地机器和我的开发主机。