Publié le :
Administration CREATION_INTERNE

Visualiser l'accès effectif à une table

Ce code est également disponible en : Deutsch English Español
Snippet validé
Attention : Ce code nécessite des droits administrateur.
Cette action CAS fournit des informations détaillées sur les droits d'accès effectifs d'un utilisateur ou d'un groupe à une ressource spécifique (table, caslib ou colonne) sur le serveur CAS. Elle prend en compte toutes les règles d'accès explicites et héritées, ainsi que la présence de filtres au niveau des lignes. Les résultats indiquent, pour chaque identité et permission pertinente, si l'accès est autorisé (explicitement ou hérité), non autorisé ou filtré. Les décisions peuvent être retournées sous forme numérique (par défaut) ou textuelle pour une meilleure lisibilité.
Analyse des données

Type : CREATION_INTERNE


Les exemples fournis créent leurs propres données via des DATA steps avec DATALINES ou utilisent des caslibs par défaut comme `casuser` pour garantir leur autonomie et leur exécutabilité.

1 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple illustre l'utilisation la plus simple de l'action `whatIsEffective` pour une table spécifique. Il crée d'abord une petite table en mémoire CAS (`casuser.mydata`), puis appelle l'action `whatIsEffective` en spécifiant la caslib (`casuser`), le type d'objet (`table`) et le nom de la table (`mydata`). Les résultats affichent l'accès effectif pour les utilisateurs et groupes pertinents par défaut sous forme numérique.
Copié !
1/* Création d'une table CAS temporaire pour l'exemple */
2DATA casuser.mydata;
3 INPUT id name $;
4 DATALINES;
51 Alice
62 Bob
73 Charlie
8;
9RUN;
10 
11PROC CAS;
12 /* Connexion à la session CAS par défaut */
13 SESSION casauto;
14 
15 /* Vérification de l'accès effectif à la table 'mydata' dans la caslib 'casuser' */
16 ACCESSCONTROL.whatIsEffective /
17 objectSelector={caslib="casuser",objType="table",TABLE="mydata"};
18QUIT;
19 
20/* Nettoyage de la table temporaire */
21PROC CAS;
22 SESSION casauto;
23 TABLE.dropTable / caslib="casuser", name="mydata";
24QUIT;
2 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple avancé montre comment spécifier des identités (utilisateurs ou groupes) pour lesquels l'accès effectif doit être vérifié. L'option `returnDecisionText=TRUE` est utilisée pour obtenir des résultats plus lisibles (par exemple, 'Authorized', 'Not Authorized') au lieu des codes numériques. On vérifie ici l'accès pour 'sasadm' (un utilisateur typiquement administrateur) et 'sasguest' (un utilisateur invité) sur une table de données de ventes.
Copié !
1/* Création d'une table CAS temporaire pour l'exemple */
2DATA casuser.sales_data;
3 INPUT region $ sales;
4 DATALINES;
5East 100
6West 150
7North 200
8South 120
9;
10RUN;
11 
12PROC CAS;
13 SESSION casauto;
14 
15 /* Vérification de l'accès effectif pour des identités spécifiques */
16 /* et demande un résultat en texte compréhensible */
17 ACCESSCONTROL.whatIsEffective /
18 objectSelector={caslib="casuser", objType="table", TABLE="sales_data"},
19 identities={
20 {{id="sasadm", idType="user"}}, /* Exemple: administrateur CAS */
21 {{id="sasguest", idType="user"}} /* Exemple: utilisateur invité */
22 },
23 returnDecisionText=TRUE; /* Demander le texte de décision au lieu des codes numériques */
24QUIT;
25 
26/* Nettoyage de la table temporaire */
27PROC CAS;
28 SESSION casauto;
29 TABLE.dropTable / caslib="casuser", name="sales_data";
30QUIT;
3 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple démontre la flexibilité de l'action `whatIsEffective` en l'appliquant à une caslib entière plutôt qu'à une table spécifique. Il utilise également des macro-variables (`%let`) pour dynamiser les noms de caslib et de groupe, ce qui est courant dans les scripts SAS plus complexes. On vérifie ici l'accès effectif du groupe `CASHostAccountUsers` à la caslib `casuser`.
Copié !
1/* Création d'une table CAS temporaire pour s'assurer que la caslib casuser contient des données */
2DATA casuser.products;
3 INPUT product $ price;
4 DATALINES;
5Apple 1.00
6Banana 0.50
7Orange 0.75
8;
9RUN;
10 
11%let targetCaslib = casuser;
12%let targetGroup = CASHostAccountUsers;
13 
14PROC CAS;
15 SESSION casauto;
16 
17 /* Vérifier l'accès effectif pour une caslib entière pour un groupe */
18 ACCESSCONTROL.whatIsEffective /
19 objectSelector={caslib="&targetCaslib", objType="caslib"},
20 identities={
21 {{id="&targetGroup", idType="group"}} /* Vérifier pour le groupe d'utilisateurs CAS */
22 },
23 returnDecisionText=TRUE;
24QUIT;
25 
26/* Nettoyage de la table temporaire */
27PROC CAS;
28 SESSION casauto;
29 TABLE.dropTable / caslib="casuser", name="products";
30QUIT;
4 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple plus avancé vise à illustrer la détection de filtres au niveau des lignes par `whatIsEffective`. Il crée une table, puis vérifie l'accès pour un administrateur et un utilisateur hypothétique (`user101`). Si un filtre avait été précédemment configuré pour `user101` sur cette table (par exemple, pour ne voir que ses propres transactions), l'action `whatIsEffective` le signalerait avec une décision comme 'Authorized with Filter'. Le code pour ajouter un tel filtre est inclus à titre indicatif mais commenté, car il nécessiterait des privilèges administratifs et serait une action séparée.
Copié !
1/* Création d'une table CAS temporaire */
2DATA casuser.transactions;
3 INPUT transaction_id amount user_id;
4 DATALINES;
51 100 101
62 50 102
73 200 101
84 75 103
9;
10RUN;
11 
12/* Création d'une table temporaire avec des contrôles d'accès basiques (pour simuler un filtre si possible) */
13/* NOTE: L'ajout de contrôles de table avec filtres est une opération distincte. */
14/* Cet exemple suppose qu'un filtre pourrait exister et montre comment whatIsEffective le révélerait. */
15 
16PROC CAS;
17 SESSION casauto;
18 
19 /* Tentative de vérifier l'accès effectif pour un utilisateur qui pourrait avoir un filtre */
20 /* Si un filtre est en place, le résultat de returnDecisionText=TRUE affichera 'Authorized with Filter'. */
21 ACCESSCONTROL.whatIsEffective /
22 objectSelector={caslib="casuser", objType="table", TABLE="transactions"},
23 identities={
24 {{id="sasadm", idType="user"}}, /* Utilisateur administrateur */
25 {{id="user101", idType="user"}} /* Utilisateur potentiel avec un filtre */
26 },
27 returnDecisionText=TRUE;
28 
29 /* Pour un véritable test de filtre, vous devriez d'abord ajouter un filtre */
30 /* Exemple (commenté, car cela dépend de la configuration et des privilèges): */
31 /* accessControl.addTableControls / caslib="casuser", name="transactions", */
32 /* grant={{id="user101", idType="user", permissions={"select"}}, filter="user_id = 101"}; */
33QUIT;
34 
35/* Nettoyage de la table temporaire */
36PROC CAS;
37 SESSION casauto;
38 TABLE.dropTable / caslib="casuser", name="transactions";
39QUIT;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved.


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« Avant de déployer une table contenant des données sensibles, lancez systématiquement cette action sur un utilisateur test. C'est la garantie que vos filtres de sécurité sont aussi hermétiques que prévu »