Cas d’usage original, comment faire en sorte de donner les mêmes droits d’accès sur un Workspace PowerBI que sur nos cubes On-Premise qui devront eux-aussi autoriser nos utilisateurs afin de faire fonctionner nos rapports en DirectQuery. (Idéalement j’aurais demandé la création d’un groupe AD local que j’aurais utilisé dans PowerBI et dans mon cube… mais là cela n’était pas possible…)
La solution que je vous propose est la suivante :
- Récupérer le groupe AzureAd auto généré lorsque vous avez crée un Workspace dans PowerBI (Tremblez les responsables AD… Nous, utilisateurs, allons créer un tas de groupes sans respecter de conventions de nommage… :))
- Récupérer la liste de membres le constituant
- Ajouter ces membres dans un Rôle en lecture sur notre cube
1 – Récupérer les informations du groupe AD
Pour ce faire, nous utiliserons #PowerShell et son magnifique module Azure AD: v2.0
Pour ceux qui ne l’ont pas encore, vous pouvez installer celui-ci avec la commande suivante :
install-module azuread
(Install-module n’est pas installé par défaut, vous pouvez le telecharger ici => https://technet.microsoft.com/en-us/sysinternals/pstools.aspx) & vous aurez aussi besoin de l’outil de connexion à azure msoidcli
Les pré-requis installés, il ne reste plus qu’à nous connecter à notre compte Azure AD :
$user = "chsauget@scop-it.com" $pw = ConvertTo-SecureString -Key (1..16) "76492d1116743f042341G8ASg9AHwAMgAwADgAYwAyADMAZQA5ADYAOAA3ADkANgA5AGQAMgA2AGQAOAAyAGQAZAA4ADIAMgAyAGQAYQBiADUAMgBlADIAMQAyADYANAAxAGUANwAzADcANgAxADgANgA0ADgAYQA0ADYAZQA2ADkAYQBhADgANAA4ADYAYwBhADgAYgA=" $cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $user, $pw Connect-AzureAD -Credential $cred
(Plus d’information sur les SecureString)
Et le code suivant afin de récupérer notre groupe ainsi que nos membres :
#Azure AD Connection with SecuredString $user = "chsauget@scop-it.com" $pw = ConvertTo-SecureString -Key (1..16) "76492d1116743f0423413b16050a5345MgB8AGUANQBLAEUAYQBrAG8ASgBPAE8AbwAyADcAKwAwADQAMwBCAEIAaQBoAHcAPQA9AHwAMgAwADgAYwAyADMAZQA5ADYAOAA3ADkANgA5AGQAMgA2AGQAOAAyAGQAZAA4ADIAMgAyAGQAYQBiADUAMgBlADIAMQAyADYANAAxAGUANwAzADcANgAxADgANgA0ADgAYQA0ADYAZQA2ADkAYQBhADgANAA4ADYAYwBhADgAYgA=" $cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $user, $pw Connect-AzureAD -Credential $cred #We retrieve Azure Group Id Get-AzureADGroup -SearchString "MsCloudSummit" | foreach { $objectid = $_.objectid } #Iteration on UPN Get-AzureADGroupMember -ObjectId $objectid | foreach { #Logic about the accounts Write-Host $_.UserPrincipalName }
2 – Gestion des rôles en AMO
On profite de la dernière version de l’AMO pour SQL 2016 et nous aurons donc juste à utiliser :
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Tabular") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Core") add-rolemember -Server ".\STD" –membername $_.UserPrincipalName –database “MsCloudSummit” –rolename “Reader”
3 – Script Final
#SSAS Connection [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Tabular") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Core") #Azure AD Connection with SecuredString $user = "chsauget@scop-it.com" $pw = ConvertTo-SecureString -Key (1..16) "76492d1116743f0423413b160gASgBPAE8AbwAyADcAKwAwADQAMwBCAEIAaQBoAHcAPQA9AHwAMgAwADgAYwAyADMAZQA5ADYAOAA3ADkANgA5AGQAMgA2AGQAOAAyAGQAZAA4ADIAMgAyAGQAYQBiADUAMgBlADIAMQAyADYANAAxAGUANwAzADcANgAxADgANgA0ADgAYQA0ADYAZQA2ADkAYQBhADgANAA4ADYAYwBhADgAYgA=" $ASServer = ".\STD" $ASDb = "MsCloudSummit" $RoleName = "Reader" $cred = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $user, $pw Connect-AzureAD -Credential $cred #We retrieve Azure Group Id Get-AzureADGroup -SearchString "MsCloudSummit" | foreach { $objectid = $_.objectid } #Iteration on UPN Get-AzureADGroupMember -ObjectId $objectid | foreach { #Logic about the accounts add-rolemember -Server $ASServer –membername $_.UserPrincipalName –database $ASDb –rolename $RoleName }