繁体   English   中英

通过 Powershell 或 CLI 在 Azure Synapse 上运行 SQL 脚本

[英]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 自动创建服务主体。 是否可以从

创建自动化账户

  1. 打开Azure 门户并搜索自动化帐户

在此处输入图像描述 Select 自动化帐户,并在另一个屏幕中。 单击创建并填写所需的属性。

在此处输入图像描述

  1. 创建自动化帐户后,Runbook 选项位于左侧菜单中。 通过打开它,它具有不同类型的默认/教程 Runbook。 要自动化 Synapse Analytics 的过程,请在自动化帐户中安装一些必需的模块。 在左侧菜单中,找到并单击模块,搜索 Az.Accounts 并将此模块导入自动化帐户。

在此处输入图像描述

导入后,按照相同的过程导入 Az.Synapse,这是此自动化任务所需的另一个模块。

  1. 导入所需模块后,创建一个 Runbook。

在此处输入图像描述 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)"

}

在此处输入图像描述

  1. 发布后,单击开始按钮并输入 Synapse Analytics 值,将创建一个作业。

  2. 作业页面上有各种选项,如状态、错误、异常等。完成作业后,Synapse 将通过此 Runbook 恢复/暂停。

  3. 现在为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM