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é !
/* Création d'une table CAS temporaire pour l'exemple */
data casuser.mydata;
input id name $;
datalines;
1 Alice
2 Bob
3 Charlie
;
run;
proc cas;
/* Connexion à la session CAS par défaut */
session casauto;
/* Vérification de l'accès effectif à la table 'mydata' dans la caslib 'casuser' */
accessControl.whatIsEffective /
objectSelector={caslib="casuser",objType="table",table="mydata"};
quit;
/* Nettoyage de la table temporaire */
proc cas;
session casauto;
table.dropTable / caslib="casuser", name="mydata";
quit;
1
/* Création d'une table CAS temporaire pour l'exemple */
2
DATA casuser.mydata;
3
INPUT id name $;
4
DATALINES;
5
1 Alice
6
2 Bob
7
3 Charlie
8
;
9
RUN;
10
11
PROC 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' */
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é !
/* Création d'une table CAS temporaire pour l'exemple */
data casuser.sales_data;
input region $ sales;
datalines;
East 100
West 150
North 200
South 120
;
run;
proc cas;
session casauto;
/* Vérification de l'accès effectif pour des identités spécifiques */
/* et demande un résultat en texte compréhensible */
accessControl.whatIsEffective /
objectSelector={caslib="casuser", objType="table", table="sales_data"},
identities={
{{id="sasadm", idType="user"}}, /* Exemple: administrateur CAS */
{{id="sasguest", idType="user"}} /* Exemple: utilisateur invité */
},
returnDecisionText=TRUE; /* Demander le texte de décision au lieu des codes numériques */
quit;
/* Nettoyage de la table temporaire */
proc cas;
session casauto;
table.dropTable / caslib="casuser", name="sales_data";
quit;
1
/* Création d'une table CAS temporaire pour l'exemple */
2
DATA casuser.sales_data;
3
INPUT region $ sales;
4
DATALINES;
5
East 100
6
West 150
7
North 200
8
South 120
9
;
10
RUN;
11
12
PROC 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 */
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é !
/* Création d'une table CAS temporaire pour s'assurer que la caslib casuser contient des données */
data casuser.products;
input product $ price;
datalines;
Apple 1.00
Banana 0.50
Orange 0.75
;
run;
%let targetCaslib = casuser;
%let targetGroup = CASHostAccountUsers;
proc cas;
session casauto;
/* Vérifier l'accès effectif pour une caslib entière pour un groupe */
accessControl.whatIsEffective /
objectSelector={caslib="&targetCaslib", objType="caslib"},
identities={
{{id="&targetGroup", idType="group"}} /* Vérifier pour le groupe d'utilisateurs CAS */
},
returnDecisionText=TRUE;
quit;
/* Nettoyage de la table temporaire */
proc cas;
session casauto;
table.dropTable / caslib="casuser", name="products";
quit;
1
/* Création d'une table CAS temporaire pour s'assurer que la caslib casuser contient des données */
2
DATA casuser.products;
3
INPUT product $ price;
4
DATALINES;
5
Apple 1.00
6
Banana 0.50
7
Orange 0.75
8
;
9
RUN;
10
11
%let targetCaslib = casuser;
12
%let targetGroup = CASHostAccountUsers;
13
14
PROC CAS;
15
SESSION casauto;
16
17
/* Vérifier l'accès effectif pour une caslib entière pour un groupe */
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é !
/* Création d'une table CAS temporaire */
data casuser.transactions;
input transaction_id amount user_id;
datalines;
1 100 101
2 50 102
3 200 101
4 75 103
;
run;
/* Création d'une table temporaire avec des contrôles d'accès basiques (pour simuler un filtre si possible) */
/* NOTE: L'ajout de contrôles de table avec filtres est une opération distincte. */
/* Cet exemple suppose qu'un filtre pourrait exister et montre comment whatIsEffective le révélerait. */
proc cas;
session casauto;
/* Tentative de vérifier l'accès effectif pour un utilisateur qui pourrait avoir un filtre */
/* Si un filtre est en place, le résultat de returnDecisionText=TRUE affichera 'Authorized with Filter'. */
accessControl.whatIsEffective /
objectSelector={caslib="casuser", objType="table", table="transactions"},
identities={
{{id="sasadm", idType="user"}}, /* Utilisateur administrateur */
{{id="user101", idType="user"}} /* Utilisateur potentiel avec un filtre */
},
returnDecisionText=TRUE;
/* Pour un véritable test de filtre, vous devriez d'abord ajouter un filtre */
/* Exemple (commenté, car cela dépend de la configuration et des privilèges): */
/* accessControl.addTableControls / caslib="casuser", name="transactions", */
/* grant={{id="user101", idType="user", permissions={"select"}}, filter="user_id = 101"}; */
quit;
/* Nettoyage de la table temporaire */
proc cas;
session casauto;
table.dropTable / caslib="casuser", name="transactions";
quit;
1
/* Création d'une table CAS temporaire */
2
DATA casuser.transactions;
3
INPUT transaction_id amount user_id;
4
DATALINES;
5
1100101
6
250102
7
3200101
8
475103
9
;
10
RUN;
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
16
PROC 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'. */
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.
« 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 »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.