尝试连接到 Azure Sql 数据库时用户“用户”登录失败

问题描述 投票:0回答:1

我尝试了几种不同的方式来连接到 Azure Sql 数据库,但是在 powershell 中的每次尝试都失败了。

这是我第一次尝试使用连接字符串,结果是:用户“用户”登录失败。错误

Import-Module -Name SqlServer

$connString = 'Server=tcp:{server}.database.windows.net,1433;Database={db};User ID={usr}@{server};Password={pwd};Trusted_Connection=False;Encrypt=True;'

Invoke-Sqlcmd -ConnectionString $connString -Query "SELECT 'Hello world!'"

第二次尝试,同样的错误:

Import-Module -Name SqlServer

Invoke-Sqlcmd -ServerInstance 'tcp:{db}.database.windows.net,1433' -Database '{db}' -Username '{usr}' -Password '{pwd}' -Query "SELECT 'Hello world!'"

第三次尝试PSCredentials,同样的错误:

Import-Module -Name SqlServer

$password = ConvertTo-SecureString '{pwd}' -AsPlainText -Force
$mssqlCredentials = New-Object System.Management.Automation.PSCredential ('{usr}', $password)

Invoke-Sqlcmd -ServerInstance 'tcp:{server}.database.windows.net,1433' -Database '{db}' -Credential $mssqlCredentials -Query "SELECT 'Hello world!'"

我也试过使用 Invoke-SqlCmd2 模块,但没有运气,同样的错误:

Import-Module Invoke-SqlCmd2

$connString = 'Server=tcp:{server}.database.windows.net,1433;Database={db};User ID={usr}@{server};Password={pwd};Trusted_Connection=False;Encrypt=True;'

Invoke-Sqlcmd2 -SQLConnection $connString -Query "SELECT 'Hello world!'"

我想提一下使用 SSMS 连接或使用带有 sqlachemy 的 python jupyter notebook 工作没有任何问题:

from sqlalchemy import create_engine, text

conn_str = f"mssql+pymssql://[usr]:[pwd]@[server].database.windows.net:1433/[db]"
engine = create_engine(conn_str, echo=False)

with engine.connect() as conn:
    result = conn.execute(text("SELECT 'Hello world!'"))
    print(result.all())

很多回答说密码里面有特殊字符就需要修改密码,虽然我唯一用的特殊字符是'§',而且由于账号使用频率高,修改密码不可行其他不同的过程。

而且我也不想在我们的堆栈中引入一种新的脚本语言,所以希望有人知道绕过这个永恒问题的方法。

python sql-server azure powershell ssms
1个回答
0
投票

如果你之前定义过usr和pwd为

$usr="yourUser"
$pwd="§yourPassword§"

线

$password = ConvertTo-SecureString '{pwd}' -AsPlainText -Force

应该是

$password = ConvertTo-SecureString $pwd -AsPlainText -Force

意味着您需要将变量“{usr/pwd}”替换为 $usr/$pwd

这应该有效:

Import-Module -Name SqlServer
$usr = "yourUser"
$pwd = "abc§123AAA"
$db = "yourDatabase"

$password = ConvertTo-SecureString $pwd -AsPlainText -Force

$password = New-Object System.Management.Automation.PSCredential ($usr, $password)

Invoke-Sqlcmd -ServerInstance 'tcp:{server}.database.windows.net,1433' -Database $db -Credential $mssqlCredentials -Query "SELECT 'Hello world!'"
© www.soinside.com 2019 - 2024. All rights reserved.