Mettez en œuvre le contrôle d'accès au niveau des lignes en créant une vue ou une table filtrée par commerçant, puis en la partageant via un package ou une attribution directe. Ce guide présente l'approche basée sur les vues (recommandée) et l'alternative basée sur les tables, en prenant pour exemple une table de commandes partagée entre plusieurs commerçants.
Quand utiliser cette approche
MaxCompute prend également en charge une fonctionnalité native de contrôle d'accès au niveau des lignes conçue pour la définition de règles à grande échelle. Cette fonctionnalité élimine la création d'objets par utilisateur et évite le stockage redondant, mais elle peut générer des plans de requête plus complexes et comporte certaines limitations décrites dans la rubrique liée.
Les méthodes basées sur les vues et les tables présentées dans ce guide sont adaptées lorsque chaque utilisateur nécessite sa propre règle de filtrage, que le nombre de commerçants est gérable et que vous souhaitez des plans de requête plus simples basés sur des données préfiltrées.
Choisir une méthode
|
Méthode |
Fonctionnement |
Cas d'utilisation |
Inconvénients |
|
Vues (recommandé) |
Créez une vue filtrée par commerçant ; partagez-la via un package ou une attribution directe |
Chaque commerçant a besoin d'un accès en lecture seule à ses propres lignes sans coût de stockage supplémentaire |
— |
|
Tables |
Créez une table filtrée par commerçant |
Chaque commerçant a besoin de son propre jeu de données isolé |
Les données sont dupliquées ; les tables doivent rester synchronisées avec la table source |
Privilégiez les vues lorsque l'accès en lecture seule aux lignes filtrées est suffisant, ce qui couvre la plupart des scénarios de reporting multi-locataires.
Optez pour les tables lorsque les processus en aval nécessitent une écriture dans le jeu de données filtré, ou lorsque des instantanés préagrégés sont nécessaires d'un point de vue opérationnel. Tenez compte du coût de stockage et de la charge de synchronisation avant de choisir cette approche.
Les deux méthodes créent un objet par commerçant. À grande échelle, envisagez la fonctionnalité native de contrôle d'accès au niveau des lignes qui gère les définitions de règles de manière centralisée sans création d'objet par utilisateur.
Scénario
La table table_order du projet A stocke les enregistrements de transactions de commandes pour tous les commerçants. Tous les commerçants peuvent accéder à la table, mais chacun ne doit voir que les enregistrements de sa propre boutique. La colonne sellerid identifie le commerçant, de sorte qu'un filtre par commerçant sur sellerid assure l'isolation au niveau des lignes.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un compte Alibaba Cloud avec accès au projet A
Le nom du projet du commerçant et le nom d'utilisateur Alibaba Cloud auquel accorder l'accès
Accorder l'accès via un package
Utilisez un package pour partager la vue filtrée avec le projet du commerçant. Les packages constituent le mécanisme standard de MaxCompute pour le partage de ressources interprojets.
Connectez-vous au client MaxCompute à l'aide de votre compte Alibaba Cloud.
-
Créez une vue filtrée pour le commerçant dans le projet A. Remplacez
sellerid='xxxx'par l'ID vendeur réel du commerçant.create view <view_name> as select * from table_order WHERE sellerid='xxxx';Pour connaître la syntaxe et les options des vues, consultez Gérer les vues.
-
Créez un package dans le projet A, ajoutez-y la vue et autorisez le projet du commerçant à l'installer.
-- Create a package. create package <package_name>; -- Add the view to the package. add table <view_name> to package <package_name>; -- Allow the merchant's project to install the package. allow project <project_name> to install package <package_name>;Pour plus d'informations sur le partage interprojets, consultez Accès aux ressources interprojets basé sur les packages.
-
Basculez vers le contexte du projet du commerçant, installez le package et accordez à l'utilisateur du commerçant un accès en lecture.
-- Install the package in the merchant's project. install package <Project A>.<package_name>; -- Grant the user read permission on the package. grant read on package <Project A>.<package_name> to user <user_name>;
Accorder l'accès directement
En alternative aux packages, accordez les autorisations SELECT et DESCRIBE directement sur la vue. Utilisez cette approche lorsque le partage interprojets n'est pas requis.
grant select,describe on table <view_name> to user <user_name>;