python - 尝试连接到 Azure Sql 数据库时,用户 'user' 登录失败

标签 python sql-server azure powershell ssms

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

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

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 或使用 python jupyter 笔记本与 sqlachemy 进行连接没有任何问题:

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())

很多答案都表明,如果密码包含特殊字符,我需要更改密码,尽管我使用的唯一特殊字符是“§”,并且由于该帐户使用的事实,更改密码是不可行的许多其他不同的过程。

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

稍后编辑:我开始相信这是 ODBC 驱动程序问题。由于Python使用它自己的SQL Server驱动程序并且它可以在Python上运行。我还在另一台远程计算机上尝试过,powershell 脚本正在运行。我仍然不确定出了什么问题。我尝试安装一些缺失的 sql 驱动程序,我认为它们可能会解决问题,但没有成功。

这些是我本地计算机上的驱动程序:

local machine

这些是来自远程计算机的驱动程序:

remote machine

最佳答案

如果您之前已将 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!'"

关于python - 尝试连接到 Azure Sql 数据库时,用户 'user' 登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75757412/

相关文章:

azure - 如何在 Azure 中使用事件网格触发 C++ 代码?

Azure AD 通过 Azure CLI 添加 key

python - 将字符串视为列表

sql-server - 在输出消息中添加有关 PK 值的信息 - 更容易找到有缺陷的记录

python - 如何在数据框中应用第 5 列的 cummax 逻辑

sql - 在SQL Server中查找第100条、200条等记录

sql - Excel 到 SQL 远程更新到特定用户

azure - 异常 :"Cannot find the ' Connect-AzureVM' 命令”

python - Elasticsearch:文档未通过自定义映射添加到索引中

python - 使用numpy数组实现softmax函数