检测SQL Connection是否使用别名(配置管理器)

本文关键字:配置 配置管理 管理器 别名 SQL Connection 是否 检测 | 更新日期: 2023-09-27 18:08:37

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

Alias Name : CRM_APP
Port : 5051
Protocol: TCP/IP
Server: 10.10.10.10'MYSERVER
我正在使用 连接到SQL
Servername : CRM_APP

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

从注释中复制的更清晰的需求解释:

基本上我想限制Winforms应用程序登录只到局域网。如果用户试图通过internet连接到服务器,则不应该这样做允许的。但是我们不希望使用防火墙策略或SQL来实现登录触发器。如果它正在使用主机,我们已经处理了连接文件。现在我们需要处理Aliases

检测SQL Connection是否使用别名(配置管理器)

使用SERVERPROPERTY:

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

更新

顺便说一句,如果你想让你的应用程序专门连接到一个已知的服务器,利用SSL/TLS:

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

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

我不确定我是否完全理解您的要求,但可能有一种可能性(假设您使用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权限,因此您可能需要将查询包装在存储过程、视图或函数中,以避免授予应用程序登录此权限。