通过PowerShell连接Azure SQL DB,导致现有连接被远程主机强制关闭



通过Powershell连接到Azure SQL DB (PaaS)

$sqlServer = "x.database.windows.net"
$sqlDB = "master"
$conn = new-object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=tcp:$($sqlServer),1433;Initial Catalog=$($sqlDB);Persist Security Info=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" 
$conn.AccessToken = $env:ACCESSTOKEN
$conn.Open()

然后出现错误:

Exception calling "Open" with "0" argument(s): "A connection was successfully established with the server, but then an 
error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed 
by the remote host.)"
At C:Usersxtestcon2.ps1:6 char:1
+ $conn.Open()
+ ~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException
  • 我可以通过SSMS直接连接到服务器,没有问题。
  • 防火墙规则已设置。
  • 最小TLS 1.2
  • 资源利用率为零
  • 没有其他连接到数据库,除了我的。
  • 我已经通过RingBuffer和eventlog在SQL方面,看不到任何错误。

有人知道我如何解决这个问题吗?

我们需要运行install - module Az命令来安装模块

尝试通过运行

验证到Azure

Connect-AzAccount

我们可以通过运行下面的命令找到数据库,如果返回你想要连接的数据库,你就可以运行脚本了。

Get-AzSqlServer -ResourceGroupName .

下面的PS脚本将建立连接并执行查询并给出输出。

Import-Module Az.Sql -Force

$rgName = '<Resource Group Name>'
$sqlServer = Get-AzSqlServer -ResourceGroupName $rgName
$sqlDatabase = Get-AzSqlDatabase -ServerName $sqlServer.ServerName -ResourceGroupName $rgName

$Params = @{
'ServerInstance' = $sqlServer.FullyQualifiedDomainName;
'Database' = $sqlDatabase.DatabaseName[0];
'Username' = $sqlServer.SqlAdministratorLogin;
'Password' = ‘<Password>’;
'Query' = 'SQL Statement to access table'
}

Invoke-Sqlcmd @Params

也可参考Microsoft关于使用Powershell进行Azure SQL数据库认证的文章。

此连接问题通常发生在少数位置的服务中,也发生在AccessToken过期时。

相关内容

  • 没有找到相关文章

最新更新