检测SQL连接是否正在使用别名(配置管理器)

时间:2013-04-10 07:11:37

标签: c# sql sql-server tsql database-connection

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

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

我使用

连接到SQL
Servername : CRM_APP

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

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

  

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

2 个答案:

答案 0 :(得分: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属性相同的值。

更新

BTW如果您希望应用程序专门连接到众所周知的服务器,请利用SSL / TLS:

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

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

答案 1 :(得分: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权限,因此您可能需要将查询包装在存储过程,视图或函数中,以避免授予您的应用程序登录此权限。