0

我在 SQL Server 配置管理器>SQL Native 客户端配置 > 别名中有一个条目

Alias Name : CRM_APP
Port : 5051
Protocol: TCP/IP
Server: 10.10.10.10\MYSERVER

我正在使用连接到 SQL

Servername : CRM_APP

我们如何检测 SQL 连接是否使用 Alias(基本上我想知道客户端正在使用的服务器的实际 IP 地址)使用 SQL 或 C# 连接到服务器?

从评论中复制的要求更清晰的解释:

基本上我想将 Winforms 应用程序登录仅限于 LAN。如果用户尝试通过 Internet 连接到服务器,则不应被允许。但是我们不想使用防火墙策略或 SQL 登录触发器来做到这一点。如果它使用主机文件,我们已经处理了连接。现在我们需要处理别名

4

2 回答 2

1

使用SERVERPROPERTY

  • SERVERPROPERTY('ServerName'):与指定的 SQL Server 实例关联的 Windows 服务器和实例信息。
  • SERVERPROPERTY('MachineName'):运行服务器实例的 Windows 计算机名称。对于群集实例,即在 Microsoft 群集服务上的虚拟服务器上运行的 SQL Server 实例,它返回虚拟服务器的名称。
  • SERVERPROPERTY('ComputerNamePhysicalNetBIOS'):当前运行 SQL Server 实例的本地计算机的 NetBIOS 名称。对于故障转移群集上的 SQL Server 群集实例,此值会随着 SQL Server 实例故障转移到故障转移群集中的其他节点而更改。在 SQL Server 的独立实例上,此值保持不变并返回与 MachineName 属性相同的值。

更新

顺便说一句,如果您希望您的应用程序专门连接到知名服务器,请利用 SSL/TLS:

  • 在应用程序使用的连接字符串中指定Encrypt=True。这将触发连接所需的 SSL/TLS。
  • 为服务器指定 FQDN,请参阅Encrypting Connections to SQL Server,特别是该SQL Server Native Client Certificate Requirements部分。
  • 在服务器上安装证书以供 SQL 使用,请参见Configuring SSL For SQL Server上面的同一链接。
  • 将服务器的证书添加到客户端上的受信任证书中

这样,您就为任何“劫持”应用程序连接的尝试添加了一个重大障碍。

于 2013-04-10T08:05:22.130 回答
0

我不确定我是否完全理解您的要求,但可能一种可能性(假设您使用的是 SQL 2005 或更高版本)是sys.dm_exec_connections从客户端查询管理视图?查询将类似于:

SELECT  session_id, local_net_address, client_net_address 
FROM    sys.dm_exec_connections 
WHERE   session_id = @@SPID

访问sys.dm_exec_connections需要VIEW SERVER STATE权限,因此您可能需要将查询包装在存储过程、视图或函数中,以避免授予您的应用程序登录此权限。

于 2013-04-10T07:58:18.660 回答