Si vous utilisez Synapse Analytics avec SQL Pool Serverless (ancien SQL Pool On demand) et que vous souhaitez gérer une notion de « Principe de moindre privilège », certaines petites choses sont à prendre en compte.
La création d’un USER en utilisant par exemple un groupe AD :
CREATE USER [MyAdGroup] FROM EXTERNAL PROVIDER
Avec [MyAdGroup], un groupe présent dans l’Active Directory à qui on veut donner le minimum de droit afin d’exécuter une requête sur notre Synapse SQL Pool Serverless.
Les accès aux DATABASE SCOPED CREDENTIAL
En effet, si vous définissez vos accès aux comptes de stockage via une Shared Access Signature, vous aurez besoin de créer des DATABASE SCOPED CREDENTIAL.
Dans ce cas, vous aurez certainement utilisé la syntaxe suivante pour créer votre source de données :
CREATE MASTER KEY
CREATE DATABASE SCOPED CREDENTIAL [SasToken_MonStorage]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '?sv=2019-12-12&ss=bfqt&srt=sco&sp=rdlx&se=2099-09-02T21:03:45Z&st=2020-08-31T13:03:45Z&spr=https&sig=z11sZ9cHpPRf0MxxxxG8J9c%3D';
GO
CREATE EXTERNAL DATA SOURCE [MaDataSource]
WITH ( LOCATION = 'https://monstorage.blob.core.windows.net/insights-logs-pipelineruns/resourceId=/SUBSCRIPTIONS/',
CREDENTIAL = [SasToken_MonStorage]
)
Et pour donner les droits aux utilisateurs sur le Database Scoped Credential, il faudra donc bien utiliser :
GRANT CONTROL ON DATABASE SCOPED CREDENTIAL :: [SasToken_MonStorage] TO [MyAdGroup]
Les accès à la vue :
GRANT SELECT ON Object::[dbo].[Mavue]
Et cela serait suffisant si vous n’utilisiez pas quelque chose comme :
SELECT
*
FROM
OPENROWSET(
BULK '/folder/*.parquet', DATA_SOURCE = [MaDataSource],
FORMAT = 'PARQUET'
) AS file
Car à cette étape, un message d’erreur apparait :
You do not have permission to use the bulk load statement
Les accès ADMINISTER DATABASE BULK
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [MyAdGroup]
A savoir que si vous utilisiez un Login SQL vous n’auriez pas le problème car celui-ci serait membre du rôle public niveau serveur et aurait donc le droit d’utiliser BULK…
Utiliser un Login FROM EXTERNAL PROVIDER
Nous l’avons vu précédemment, utiliser un Login règle le problème, il est donc possible de créer notre User via un Login pour avoir directement les droits sur les opérations BULK.
CREATE LOGIN [MyAdGroup] FROM EXTERNAL PROVIDER
CREATE USER [MyAdGroup] FROM LOGIN [MyAdGroup]
2 Comments
Bonjour
Comme d’hab’ super Post merci.
j’aurais aime avoir votre aide sur le problème suivant
J’utilise Synapse pool dédié et des fichiers csv
Je crée des tables externes a l’image des fichiers, puis des vues pour modéliser en étoile puis le modèle tabulaire
Le pb est que dans les fichiers csv il n y a pas de clés techniques incrementales qui servirions dans les jointures.
Sachant que je n’ai pas le droit de créer ni de stocker des données dans synapse, quel est Pour vous le meilleur moyen de générer ces colonnes incrementales
Sol 1 : creation d’une colonne row_number dans les vues -> inconvénient volatilités
Sol 2 : concaténations des colonnes metier + hash
Sol 3 : ?
Merci
Isa
Hello,
Utiliser Synapse SQL Pool dédier sans pouvoir persister les données n’est pas une bonne idée, la solution est bien de persister les données dans une table avec une Identity(1,1).
Bonne journée,