【问题标题】:Active Directory Password Connection Azure SQL Failure from Azure AutomationAzure 自动化的 Active Directory 密码连接 Azure SQL 失败
【发布时间】:2017-08-15 19:24:36
【问题描述】:

我需要使用我设置为 Azure SQL Server AZ AD 管理员的 Azure Active Directory 管理员帐户通过 Azure 自动化连接到 Azure SQL Server。

我能够连接到 Azure SQL:

  1. 通过 Azure AD 管理员帐户使用 SSMS
  2. 在 SQL ConnectionString 中将 PowerShell ISE 与 Azure AD 管理员帐户结合使用
  3. 在 SQL ConnectionString 中通过 Azure SQL 管理员帐户(在创建新的 Azure SQL Server 时创建的帐户)使用 Azure 自动化

但是,当尝试在 SQL ConnectionString 中使用 Azure 自动化中的 Active Directory 管理员帐户连接到 Azure 自动化中的 Azure SQL 时,我收到以下错误:

New-Object:使用“1”参数调用“.ctor”的异常:“关键字 不支持:'身份验证'。"

这是我的连接尝试:

$server = "tcp:myazuresql.database.windows.net,1433"
$database = "TestDB"
$adminName = "test@mytest.onmicrosoft.com"
$adminPassword = "test1234"

$connectionString = "Server=$server;Database=$database;User ID=$adminName;Password=$adminPassword;authentication=Active Directory Password;"
$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection($connectionString)

关于为什么我可以通过 PowerShell ISE 和 SSMS 而不是 Azure 自动化与 Azure Active Directory 管理员连接的任何想法?我还可以通过 Azure 自动化和 Azure SQL 管理员帐户(您使用 Azure SQL 创建的默认管理员帐户)进行连接。

我无法连接的唯一方法是在使用 Azure 自动化时使用与 Azure SQL 绑定的 Azure Active Directory Admin。

【问题讨论】:

  • 您在使用 Import-Module AzureAutomationAuthoringToolkit 吗?
  • 我正在使用 Azure 自动化,但没有导入模块。那个模块是做什么的?在 Powershell ISE 中执行相同的代码没有问题
  • 您可以在此处阅读有关该模块的信息:powershellgallery.com/packages/AzureAutomationAuthoringToolkit/… 我只是使用这种方式完成的。我会提供包含您信息的代码。

标签: sql-server powershell azure azure-automation


【解决方案1】:

Azure 自动化帐户尚不支持使用 Azure AD 连接到 SQL。此功能需要 .NET Framework 4.6,目前 Azure 自动化工作人员只有 .NET Framework 4.5。

建议:

【讨论】:

    【解决方案2】:

    使用 Azure 自动化模块

       ## Using Azure Automation ISE Add-on
        #Install-Module -Name AzureAutomationAuthoringToolkit
        Import-Module AzureAutomationAuthoringToolkit
        $SqlServer = "myazuresql.database.windows.net"
        $SqlServerPort = "1433"
        $Database = "TestDB"
        $Table = ""
        $SqlCredentialAsset = ""
        $SqlCredential = Get-AutomationPSCredential -Name $SqlCredentialAsset 
        if ($SqlCredential -eq $null) 
            { 
                throw "Could not retrieve '$SqlCredentialAsset' credential asset. Check that you created this first in the Automation service." 
            }   
        $SqlUsername = $SqlCredential.UserName 
        $SqlPass = $SqlCredential.GetNetworkCredential().Password 
        $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$SqlServer,$SqlServerPort;Database=$Database;User ID=$SqlUsername;Password=$SqlPass;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;")
    
        $Conn.Open() 
        $Cmd=new-object system.Data.SqlClient.SqlCommand("SELECT COUNT(*) from $Table", $Conn) 
        $Cmd.CommandTimeout=120 
        $Conn.Close()
    

    RunBook 内部代码

    #Runbook
    Param
    (
    [Parameter(Mandatory=$true)]
    [String]
    $AureConnectionName
    )
    
    $AzureConn = Get-AutomationConnection -Name $AzureConnectionName
    
    If ($AuzreConn -eq $null)
    {
        throw "Could not retrieve '$SqlCredentialAsset' credential asset."
    }
    $Certificate = Get-AutomationCertificate -Name $AzureConn.AutomationCertificateName
    
    if ($Certificate -eq $null)
    {
     throw "Could not retrieve '$AzureConn.AutomationCertificateName' certificate asset." 
    }
    
    $cred = Get-Credential -Credential Domain\User
    Login-AzureRmAccount -Credential $cred
    Get-AzureRmSubscription | Select-AzureRmSubscription
    

    【讨论】:

    • 我遇到的问题是,如果不指定“Active Directory 密码”的身份验证类型,它就不起作用。使用它可以在 PowerShell ISE 中工作,但不能在 Azure 自动化中执行的实际 Azure 自动化运行手册
    • 使用 Runbook Azure 自动化对我来说很难解释。您必须创建 AutomationCertificate,然后执行您将在 PowerShell ISE 中执行的操作。自 RM 以来,我没有接触过这种方法。它仅在 Azure Classic 中。
    • 感谢您的尝试。我正在使用 AZ Auto GUI,奇怪的是代码在 PowerShell ISE 中运行,而不是在 Azure 自动化中正常运行
    • 我记得你必须创建一个证书,但我会在我为 Runbook 提供的答案中添加更多代码。
    • 谢谢扎克。这不是 AZ Auto 连接,而是尝试使用 Azure Active Directory Admin 从 Azure 自动化连接到 SQL Server。我可以使用管理员帐户通过 Azure 自动化进行连接,而不是 Active Directory 管理员帐户(有两个)。这就是为什么我将 Authentication = Active Directory 密码添加到 SQL 字符串(适用于 PowerShell ISE 但不适用于 Azure 自动化)
    【解决方案3】:

    请参考这个类似的question

    如果你想用 Azure AD 用户连接 SQL 服务器,ADAL SQL library 应该安装在你的 VM 上。现在,Azure 自动化帐户不安装库。如果你想使用 Azure AD 用户登录你的 SQL 服务器,你可以选择hybrid workers

    Azure 自动化中的 Runbook 无法访问本地资源 数据中心,因为它们在 Azure 云中运行。混合运行手册 Azure 自动化的 Worker 功能允许你在 位于数据中心的机器来管理本地资源。这 Runbook 在 Azure 自动化中存储和管理,然后交付 到一台或多台本地机器。

    【讨论】:

    • 嗨沃尔特。我正在登录 Azure SQL,而不是 VM 中托管的 SQL。我可以使用 Azure SQL Admin 和 Azure Automation 登录,而不是可以使用 Azure Automation 中的 Azure SQL 设置的 Azure Active Directory Admin。我可以在我的 Azure SQL Server(PaaS 不是 VM)上使用设置为管理员的 Azure Active Directory 帐户从 PowerShell ISE 登录。
    • @Kode 据我所知,目前无法使用带有 Runbook 的 Azure AD 用户登录 SQL Server。因为它需要 ADAL SQL 库,但自动化没有安装它。
    • 很高兴知道。任何线索为什么它可以在 PowerShell ISE 中工作?
    • 或者有没有我们可以为 ADAL SQL 库添加到 Azure 自动化的模块?
    • 在您的本地,您可以在您的 PC 上安装该库并再次测试。在自动化帐户上,我也不知道该怎么做。也许您可以创建一个新模块并导入到 Azure 自动化帐户。
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2021-04-16
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多