开发者社区> 问答> 正文

SQL Server如何获取客户端IP



场景一



问题描述


用户的公网IP不固定,使用本地IP查看工具定位到的IP不准确,即使将查询到的本地IP加入了RDS的白名单中,连接RDS的时候也报错。所以,用户需要查询到准确的客户端IP才能访问RDS。

获取客户端IP


  1. 将IP地址0.0.0.0/0或您公司的IP段加入RDS实例的白名单中,操作方法请参见设置白名单

    说明:将IP地址0.0.0.0/0添加到RDS实例的白名单中,代表允许任何IP访问RDS实例。

  2. 使用客户端连接RDS的SQL Server数据库。

  3. 执行如下命令,查询客户端IP。SELECT  CONNECTIONPROPERTY('PROTOCOL_TYPE') AS PROTOCOL_TYPE,
  4.          CONNECTIONPROPERTY('CLIENT_NET_ADDRESS') AS CLIENT_NET_ADDRESS


为确保RDS数据库的安全,获取到客户端IP后,请修改RDS实例的白名单,将在步骤1中添加的0.0.0.0/0或您公司的IP段从白名单中删除。

场景二



问题描述


若您想要统计已连接到RDS的SQL Server数据库的所有IP,或定位一些安全问题,如链接泄露等,您可以使用获取已连接到数据库的所有IP的方法。

获取所有连接到数据库的IP


  1. 将IP地址0.0.0.0/0或您公司的IP段加入RDS实例的白名单中,操作方法请参见设置白名单

    说明:将IP地址0.0.0.0/0添加到RDS实例的白名单中,代表允许任何IP访问RDS实例。

  2. 使用客户端连接RDS的SQL Server数据库。

  3. 执行如下命令,查询所有连接到数据库的IP。SELECT
  4. SP.SPID,
  5. SP.LOGINAME,
  6. SP.LOGIN_TIME,
  7. SP.HOSTNAME,
  8. SP.PROGRAM_NAME,
  9. DC.CLIENT_TCP_PORT,
  10. DC.CLIENT_NET_ADDRESS
  11. FROM SYS.SYSPROCESSES AS SP
  12. INNER JOIN SYS.DM_EXEC_CONNECTIONS AS DC
  13. ON SP.SPID = DC.SESSION_ID
  14. WHERE SP.SPID > 50
  15. AND DC.AUTH_SCHEME='SQL'


为确保RDS数据库的安全,获取到所有IP后,请修改RDS实例的白名单,将在步骤1中添加的0.0.0.0/0或您公司的IP段从白名单中删除。

查看更详细的连接参数配置


在查询到已连接到数据库的所有IP后,若您需要查看单个连接更详细的参数配置,请执行如下命令: SELECT * FROM SYS.DM_EXEC_SESSIONS WHERE SESSION_ID=<之前获取的SPID>

展开
收起
云栖大讲堂 2017-11-03 14:04:36 2215 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载