GCP同VPC下SQL Server与Windows VM连接及动态IP问题咨询
问题描述
我是GCP新手,正尝试搭建自建SQL Server与Windows VM的连接,二者位于GCP同一默认公网VPC中。目前通过将Windows VM的动态外部IP添加到SQL Server白名单,可在VM内用Microsoft SQL Server Management Studio连接,但IP动态变化需反复手动添加,同时使用sqlcmd命令行工具连接时出现登录失败错误。
已做排查
- 已配置TCP 1433端口的防火墙规则;
- 未添加白名单前,Windows VM可ping通SQL Server的连接IP;
- 尝试使用以下sqlcmd命令连接:
sqlcmd -S <server_address> -U <username> -P <password> sqlcmd -S <server_address> -U <username> -P <password> -d <database_name> -P <port_number>
出现错误:
sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'username'..
解决方案
一、动态IP白名单问题解决
给Windows VM分配静态外部IP
在GCP控制台找到目标Windows VM实例,进入编辑页面,将外部IP从“临时”改为“静态”,分配固定IP后,只需将该静态IP添加一次到SQL Server白名单即可。改用VPC内部IP连接(推荐)
由于二者在同一VPC,直接使用SQL Server的内部IP(或主机名)进行连接,将Windows VM的内部IP(或整个VPC子网网段)添加到SQL Server白名单。这种方式无需依赖外部IP,连接更稳定且安全,避免公网传输风险。白名单VPC子网网段
若有多个VM需要连接,可将VPC的子网IP段(例如默认VPC的10.128.0.0/9)添加到SQL Server白名单,同一子网内的所有VM均可直接连接,无需单独配置每个IP。
二、sqlcmd登录失败问题解决
修正命令参数错误
第二个命令中重复使用了-P(密码参数),端口参数应为小写-p,正确的命令格式如下:# 方式1:地址和端口用逗号分隔 sqlcmd -S <server_address>,<port_number> -U <username> -P <password> -d <database_name> # 方式2:单独指定端口 sqlcmd -S <server_address> -p <port_number> -U <username> -P <password> -d <database_name>验证账号权限与身份验证模式
- 确认SQL Server账号
<username>已开启远程登录权限,且密码输入正确,账号未被锁定; - 检查SQL Server的身份验证模式,确保已开启混合身份验证模式(SQL Server和Windows身份验证),若仅启用Windows身份验证,SQL账号无法登录。
- 确认SQL Server账号
内容的提问来源于stack exchange,提问作者Yuu

