我尝试了几种不同的方式来连接到 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())
很多回答说密码里面有特殊字符就需要修改密码,虽然我唯一用的特殊字符是'§',而且由于账号使用频率高,修改密码不可行其他不同的过程。
而且我也不想在我们的堆栈中引入一种新的脚本语言,所以希望有人知道绕过这个永恒问题的方法。
如果你之前定义过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!'"