运行 所有 Azure SQL 数据库中的一个过程 SQL 服务器使用自动化 运行book 不使用连接字符串

Run a procedure on all Azure SQL Database in a SQL Server using Automation Runbook without using a connection string

我正在对特定资源组内的 Azure SQL 服务器中的所有 Azure SQL 数据库执行维护相关过程。我正在使用 powershell 并使用 Get-AzSqlDatabase cmdlet 一次获取所有数据库,然后我遍历数据库并使用 username/password 在每个数据库上执行 proc。

A​​zure 是否提供了一种 运行 procs 的方法,而无需为每个数据库设置一组 username/password。我想要这个是因为在某些情况下,并非服务器中的所有数据库都具有相同的 username/password.

无论如何,您需要在访问数据库之前进行身份验证。那么问题来了,能不能自动认证。

根据我的经验,有一个解决方案可以满足您的要求。您需要:

  1. Provision an Azure Active Directory administrator for your Azure SQL Database server. And in fact, you can add a security group as the administrator, then all members of that group will be able to access the database. Refer to the following blog: Azure Active Directory User/Group And Azure SQL Database.

  2. 通过Azure Managed Identity获得令牌。

  3. 使用访问令牌连接到 Azure SQL。

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    
  4. 现在,您只需为每个 SQL 数据库启用 AAD 组身份验证。

唯一的缺点是您需要通过 Azure Managed Identity 获取访问令牌。因为,使用 Managed Identity,您无需任何用户名或密码即可获得访问令牌。但是,Azure 自动化不支持托管标识。因此,您需要使用支持 Managed Identity 的 Azure VM 或 Azure Web App 或 Azure Function。


参考:

Tutorial: Use a Windows VM system-assigned managed identity to access Azure SQL