You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PS将同一SQL用户添加到多订阅下的多个Azure数据库

完全可以通过PowerShell实现该需求,批量操作是当前多订阅多数据库场景下最简便的方案。

前置依赖
  • 安装Azure PowerShell Az模块:运行命令 Install-Module -Name Az -AllowClobber -Scope CurrentUser
  • 准备好待创建的SQL用户信息:SQL认证用户需要用户名、密码;AAD认证用户需要对应的AAD身份标识(邮箱、服务主体名等)
  • 操作账号权限要求:对所有开发环境订阅拥有Azure SQL Server Contributor权限,以及数据库的管理员操作权限
  • 运行脚本的机器IP需要加入所有目标SQL Server的防火墙允许列表,避免连接失败
批量操作脚本示例

脚本逻辑:先过滤所有开发环境订阅,再逐个遍历订阅下的SQL Server、用户数据库,最后在每个数据库执行创建用户并赋权的SQL语句。

# 登录Azure账号
Connect-AzAccount

# 过滤所有开发环境订阅,示例为按名称模糊匹配,也可替换为标签匹配:Where-Object {$_.Tags.Environment -eq "Dev"}
$devSubscriptions = Get-AzSubscription | Where-Object {$_.Name -like "*DEV*"}

# 遍历所有开发订阅
foreach ($sub in $devSubscriptions) {
    Select-AzSubscription -SubscriptionObject $sub | Out-Null
    # 获取当前订阅下所有SQL Server
    $sqlServers = Get-AzSqlServer
    foreach ($server in $sqlServers) {
        # 获取当前Server下所有用户数据库,排除系统库master
        $databases = Get-AzSqlDatabase -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName | Where-Object {$_.DatabaseName -ne "master"}
        foreach ($db in $databases) {
            # 构建数据库连接字符串,示例为AAD默认认证,也可替换为SQL管理员账号密码认证
            $connString = "Server=tcp:$($server.FullyQualifiedDomainName),1433;Database=$($db.DatabaseName);Authentication=Active Directory Default;Encrypt=Yes"
            $sqlConn = New-Object System.Data.SqlClient.SqlConnection($connString)
            
            # 待执行的创建用户SQL,示例为SQL认证用户,可根据需求调整
            $createUserSql = @"
            IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'目标用户名')
            BEGIN
                CREATE USER [目标用户名] WITH PASSWORD=N'对应用户密码'
                -- 按需分配权限,示例为读写权限
                ALTER ROLE db_datareader ADD MEMBER [目标用户名]
                ALTER ROLE db_datawriter ADD MEMBER [目标用户名]
            END
"@
            $sqlConn.Open()
            $sqlCmd = New-Object System.Data.SqlClient.SqlCommand($createUserSql, $sqlConn)
            $sqlCmd.ExecuteNonQuery() | Out-Null
            $sqlConn.Close()
        }
    }
}
注意事项
  • 正式运行前建议先注释SQL执行部分,打印所有待操作的数据库列表,确认范围符合预期后再执行实际创建操作
  • 脚本中的敏感信息(管理员密码、用户密码)不要明文存储,建议通过Get-Credential交互式获取,或者从Azure Key Vault中拉取
  • 若需排除部分开发环境数据库,可在获取数据库的步骤中新增过滤条件即可

内容的提问来源于stack exchange,提问作者KSQL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:48:03