无法从 SSMS 连接到 AWS 数据库
Posted
技术标签:
【中文标题】无法从 SSMS 连接到 AWS 数据库【英文标题】:Unable to connect to AWS database from SSMS 【发布时间】:2018-10-07 17:14:03 【问题描述】:我已经使用 Amazon RDS 创建了一个 Microsoft SQL 服务器数据库。我创建了一个包含我的 IP 的入站规则的安全组。我修改了数据库实例以包含该安全组。我复制并粘贴了连接端点,并将其粘贴到 Microsoft SQL Server 连接窗口的服务器名称字段中,后跟逗号和端口号 1433。我使用带有正确凭据的 SQL Server 身份验证。这是我尝试连接时遇到的错误,我错过了什么?
无法连接到“复制的端点名称....”us-east-1.rds.amazonaws.com,1433。
====================================
与 SQL Server 建立连接时出现与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP Provider,错误:0 - 等待操作超时。)(.Net SqlClient 数据提供者)
如需帮助,请点击:http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=258&LinkId=20476
错误号:258 严重性:20 状态:0
Program Location:
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server)
at Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()
====================================
等待操作超时
【问题讨论】:
当您执行nslookup "copied name of endpoint...."us-east-1.rds.amazonaws.com
时,它会解析为 AWS 上数据库服务器的公共 IP 地址吗?为什么不直接使用公共 IP 地址而不是 DNS 名称(至少用于排除连接故障)? (仅供参考 - 我不熟悉 Amazon RDS,我熟悉 AWS/EC2...不知道我问的问题是否正确...)
当您将 IP 添加到 AWS 安全组时,您是否还添加了 TCP 端口 1433,以便您的 SSMS 流量可以路由到服务器?您是否在 Windows Server 防火墙上打开了端口 1433 以允许流量进入服务器?您是否从服务器上提升的 CMD 窗口执行netstat -n -b -a
以验证 SQL Server 是否在端口 1433 上侦听? SQL Server 是配置为接受 TCPIP 连接还是只接受命名管道?
您是否尝试在本地计算机上运行 SSMS 并连接到 Amazon 上的数据库实例?如果是这样,为什么不简单地将 RDP 连接到 Amazon 服务器并从服务器控制台在本地运行 SSMS,而不是尝试将本地 SSMS 连接到 Amazon 数据库实例?
RDS 是“平台即服务”——没有 RDP 之类的东西,事实上这是目标的一部分——不需要维护操作系统/平台
@James L. 我做了一个 nslookup 并在端口 1433 上使用了公共 IP 并得到了同样的错误。我在为安全组创建规则时确实指定了端口 1433。我在本地计算机上使用 Windows Defender 防火墙制定了一条规则,允许端口 1433 上的所有流量,我什至完全关闭了我的防火墙,但仍然遇到相同的错误。也尝试通过我的手机使用热点,同样的错误。我的路由器也没有阻塞那个端口。
【参考方案1】:
解决了,
我通过 AWS 门户修改了数据库实例以启用公共访问,然后通过 SSMS 连接选项将“TrustServerCertificate=True”添加到连接字符串中。我现在可以连接了。
【讨论】:
以上是关于无法从 SSMS 连接到 AWS 数据库的主要内容,如果未能解决你的问题,请参考以下文章
无法从 SSMS 连接到 SQL Server Express
无法从 lambda 中的 python 连接到 aws redshift
无法从 SQL WORKBENCH 连接到 AWS RDS mysql