我在SQL Server配置管理器中有一个条目> SQL Native客户端配置>别名
Alias Name : CRM_APP
Port : 5051
Protocol: TCP/IP
Server: 10.10.10.10\MYSERVER
我使用
连接到SQLServername : CRM_APP
我们如何检测SQL连接是否正在使用Alias(基本上我想知道客户端正在使用的服务器的实际IP地址)使用SQL或C#连接到服务器?
从评论中复制的要求的更清晰的解释:
基本上我想将Winforms应用程序登录限制为LAN。 如果用户尝试通过Internet连接到服务器,则不应该 允许。但我们不想使用防火墙策略或SQL来实现它 登录触发器。如果使用主机,我们已经处理了连接 文件。现在我们需要照顾别名
答案 0 :(得分:1)
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。SQL Server Native Client Certificate Requirements
部分。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
权限,因此您可能需要将查询包装在存储过程,视图或函数中,以避免授予您的应用程序登录此权限。