1. 外网访问概述
在某些情况下,我们需要将 Microsoft SQL Server 数据库暴露在公共网络中,以便客户端或应用程序可以通过 Internet 连接到该数据库。这样可以方便远程访问数据库,特别是当用户或客户位于不同地点,或需通过公共网络进行访问时。本文将介绍一种游刃有余的过程,以实现 MSSQL 数据库的外网访问。
2. 确认网络配置
在开始之前,我们需要确认网络配置是否正确。如果你的数据库服务器位于受保护的网络环境中,需要将其配置为允许外部访问。你需要在防火墙和路由器上进行相关设置,以确保数据库服务器可以从公共网络中访问。此外,还需要进行一些网络端口的配置,这将在下文中进行详细介绍。
3. 配置SQL Server
3.1 允许远程连接
要允许远程连接到 SQL Server,请在 SQL Server Configuration Manager 中启用 TCP/IP 协议。然后,需要将 SQL Server 的默认端口更改为允许公共网络访问的端口。默认情况下,MSSQL 的端口为 1433,不同的应用程序可能需要不同的端口。
--启用TCP/IP
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\Enabled',
N'REG_DWORD', 1
GO
--更改端口号
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SupersocketNetLib\Tcp\IPAll',
N'TcpPort', REG_DWORD, 1433
GO
3.2 创建一个 SQL Server 登录
需要创建一个 SQL Server 登录,用于远程客户端的连接。你可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 代码来创建登录账号:
USE [master]
GO
CREATE LOGIN [remoteuser]
WITH PASSWORD = 'mypassword',
CHECK_POLICY = OFF,
CHECK_EXPIRATION = OFF
GO
3.3 授权登录账号
需要授权新创建的账号对数据库的访问权限,建议将权限限制在最小化。
USE [mydatabase]
GO
CREATE USER [remoteuser] FOR LOGIN [remoteuser]
GO
EXEC sp_addrolemember 'db_datareader', 'remoteuser'
GO
EXEC sp_addrolemember 'db_datawriter', 'remoteuser'
GO
4. 配置防火墙
默认情况下,Windows 防火墙将拒绝外部访问数据库服务器。所以需要在防火墙上配置一些规则,以确保公共网络可以访问 SQL Server 数据库。
4.1 允许端口号
必须允许相应的端口通过防火墙。在 Windows 防火墙上启用一个规则,允许数据库程序对公共网络进行通信,从而实现远程连接。
netsh advfirewall firewall add rule name="SQL Server"
dir=in action=allow protocol=TCP localport="1433"
remoteip=localsubnet profile=public
4.2 开启 SQL Server Browser 服务
如果 MSSQL 的默认端口无法使用,需要使用 SQL Server Browser 服务来动态配置不同的端口。为了让 SQL Server Browser 服务可以在防火墙中通过,需要将其添加到防火墙的例外程序中,如下所示:
netsh advfirewall firewall add rule name="SQL Server Browser"
dir=in action=allow protocol=TCP localport="
" remoteip=localsubnet profile=public
5. 测试连接
现在,我们可以测试通过外部网络连接到 SQL Server 的设置是否生效。使用 SSMS,或其他客户端应用程序,使用前面创建的 SQL Server 登录和密码进行连接。如果连接成功,则可以访问和管理数据库了。
6. 总结
本文介绍了如何在 MSSQL 数据库上实现外网访问。就像任何网络连接一样,安全性是最重要的。确保数据库服务器上的网络安全设置,防止未经授权的访问。在应用程序和数据库服务器之间加密所有数据,并确保使用强密码和对每个用户的访问进行审计。