如何使用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
相关产品推荐
相关产品推荐

