0

你们中的任何人都知道使用 PowerShell 和已启用 MFA 的 Azure AD 帐户执行 SQL 命令的选项吗?什么是替代方案?我需要为此创建一个服务主体吗?

我没有运气,但只找到了这个 cmdlet, Add-SqlAzureAuthenticationContext 但是当我尝试运行Invoke-Sqlcmd时,我收到以下错误:

Invoke-Sqlcmd :目标主体名称不正确。无法生成 SSPI 上下文。

4

2 回答 2

0

若要使用 AAD 凭据(mfa 或非 mfa)连接到 azure 数据库,您需要为-AccessToken参数提供经过身份验证的用户或服务主体的令牌。

以此为例。

使用访问令牌连接到 Azure SQL 数据库


# Obtain the Access Token: this will bring up the login dialog
Connect-AzAccount -TenantId 'Tenant where your server is'

#AZ Module
 $AccessToken = Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

 $SQLInfos = @{
    ServerInstance = 'SERVERNAME.database.windows.net'
    Database = 'DBNAME'
    AccessToken = $AccessToken
}

Invoke-Sqlcmd @SQLInfos -Query 'select * from sys.tables'

如果您不需要或不想要手动凭据条目,您可以使用配置为正确访问服务器/数据库的服务主体,并使用它来获取您的令牌。

使用服务主体客户端 ID/秘密获取访问令牌

$clientid = "enter application id that corresponds to the Service Principal" # Do not confuse with its display name
$tenantid = "enter the tenant ID of the Service Principal"
$secret = "enter the secret associated with the Service Principal"

$request = Invoke-RestMethod -Method POST `
           -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token"`
           -Body @{ resource="https://database.windows.net/"; grant_type="client_credentials"; client_id=$clientid; client_secret=$secret }`
           -ContentType "application/x-www-form-urlencoded"
$AccessToken = $request.access_token

参考

MSdoc - 调用 Sqlcmd

SecretManagement / SecretStore 模块

(这第二个链接没有直接关系,但如果您使用 Client ID / Secret 路线,请考虑将您的凭据存储在秘密保险库中,而不是直接存储在您的脚本中。)

于 2021-11-16T06:35:45.423 回答
0

不是真正的答案。

尝试了以下

    Add-SqlAzureAuthenticationContext -Interactive
    $sql = 'SELECT @@SERVERNAME AS ServerName';   
    $ConnectionString = 'Data Source=tcp:azSERVER.database.windows.net,1433;Initial Catalog=DBNAME;Authentication="Active Directory Interactive";User ID=USERXX@DOMAINYY.COM'
    Invoke-Sqlcmd -ConnectionString $ConnectionString -Query $sql -Verbose

并得到

Invoke-Sqlcmd : 出现一个或多个错误。在行:4 字符:5

请注意,我想使用interactive标志,

于 2020-06-03T04:28:54.703 回答