[英]Running SQL script on Azure Synapse via Powershell or CLI
我正在尝试为服务主体 SELECT 提供对我的 Azure Synapse SQL 数据的访问权限。
CREATE USER [MY_SERVICE_PRINCIPAL] FROM EXTERNAL PROVIDER WITH DEFAFULT_SCHEMA=[dbo]
GO
GRANT SELECT ON DATABASE :: MyDB TO [MY_SERVICE_PRINCIPAL];
这工作正常,但它需要我登录到工作区才能为每个新服务主体执行此操作。 有可能使这个自动化吗? 我通过 Azure CLI 自动创建服务主体。 是否可以从
Select 自动化帐户,并在另一个屏幕中。 单击创建并填写所需的属性。
导入后,按照相同的过程导入 Az.Synapse,这是此自动化任务所需的另一个模块。
4、点击Create a Runbook后,会打开一个编辑器,粘贴以下代码,保存Runbook,发布。
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]$ResourceGroupName ="rg_ResourceGroup",
[Parameter(Mandatory=$true)]
[string]$WorkspaceName = "wp_WorkSpaceName",
[Parameter(Mandatory=$true)]
[string]$Operation = "op_Pause"
)
Begin {
Write-Output "Connecting on $(Get-Date)"
#Connect to Azure using the Run As Account
Try{
$servicePrincipalConnection=Get-AutomationConnection -Name "AzureRunAsConnection"
Connect-AzAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
Catch {
if (!$servicePrincipalConnection){
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Output -Message $_.Exception
throw $_.Exception
}
}
# Validation parameters
$ArrayOperations = "Pause","Start","Restart"
If ($Operation -notin $ArrayOperations)
{
Throw "Only Pause, Start, Restart Operations are valid"
}
# Start
Write-Output "Starting process on $(Get-Date)"
Try{
$Status = Get-AzSynapseSqlPool –ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName | Select-Object Status | Format-Table -HideTableHeaders | Out-String
$Status = $Status -replace "`t|`n|`r",""
Write-Output "The current status is "$Status.trim()" on $(Get-Date)"
}
Catch {
Write-Output $_.Exception
throw $_.Exception
}
# Start block
# Start
Write-Output "Starting $Operation on $(Get-Date)"
if(($Operation -eq "Start") -and ($Status.trim() -ne "Online")){
Write-Output "Starting $Operation Operation"
try
{
Write-Output "Starting on $(Get-Date)"
Get-AzSynapseSqlPool –ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName | Resume-AzSynapseSqlPool
}
catch
{
Write-Output "Error while executing "$Operation
}
}
# Pause block
if(($Operation -eq "Pause") -and ($Status.trim() -ne "Paused")){
write-Output "Starting $Operation Operation"
try
{
Write-Output "Pausing on $(Get-Date)"
Get-AzSynapseSqlPool –ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName | Suspend-AzSynapseSqlPool
}
catch
{
Write-Output "Error while executing "$Operation
}
}
# Restart block
if(($Operation -eq "Restart") -and ($Status.trim() -eq "Online")){
Write-Output "Starting $Operation Operation"
try
{
Write-Output "Pausing on $(Get-Date)"
Get-AzSynapseSqlPool –ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName | Suspend-AzSynapseSqlPool
Write-Output "Starting on $(Get-Date)"
Get-AzSynapseSqlPool –ResourceGroupName $ResourceGroupName -WorkspaceName $WorkspaceName | Resume-AzSynapseSqlPool
}
catch
{
Write-Output "Error while executing "$Operation
}
}
}
End
{
# Exit
Write-Output "Finished process on $(Get-Date)"
}
发布后,单击开始按钮并输入 Synapse Analytics 值,将创建一个作业。
作业页面上有各种选项,如状态、错误、异常等。完成作业后,Synapse 将通过此 Runbook 恢复/暂停。
现在为 Runbook 添加一个计划,以按计划完全自动化流程。 在 Runbook 页面上,单击功能区中计划按钮的链接,然后添加计划和配置所需的参数。
您可以使用相同的工具来查询专用或无服务器池,例如,使用 PowerShell 调用 invoke-sqlcmd ,甚至是sqlcmd 。 另请参阅Synapse SQL 的连接字符串。
至于 azure cli,请参阅az synapse ,对于 powershell,请参阅Az.Synapse 。
我找到的最佳解决方案是手动将整个 Azure AD 组作为用户添加到数据库中,然后对于我创建的每个新用户,我在 DevOps 管道上使用一些基本的 Azure CLI 命令自动将他们添加到组中,而不是尝试使用单独添加它们的 SQL 脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.