Publicado el :
Administración CREATION_INTERNE

Visualizar el acceso efectivo a una tabla

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
Esta acción CAS proporciona información detallada sobre los derechos de acceso efectivos de un usuario o grupo a un recurso específico (tabla, caslib o columna) en el servidor CAS. Tiene en cuenta todas las reglas de acceso explícitas y heredadas, así como la presencia de filtros a nivel de fila. Los resultados indican, para cada identidad y permiso relevante, si el acceso está autorizado (explícita o heredado), no autorizado o filtrado. Las decisiones se pueden devolver en formato numérico (por defecto) o textual para una mejor legibilidad.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos proporcionados crean sus propios datos a través de pasos DATA con DATALINES o utilizan caslibs predeterminadas como `casuser` para garantizar su autonomía y ejecutabilidad.

1 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo ilustra el uso más simple de la acción `whatIsEffective` para una tabla específica. Primero crea una pequeña tabla en memoria CAS (`casuser.mydata`), luego llama a la acción `whatIsEffective` especificando la caslib (`casuser`), el tipo de objeto (`table`) y el nombre de la tabla (`mydata`). Los resultados muestran el acceso efectivo para los usuarios y grupos relevantes por defecto en formato numérico.
¡Copiado!
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 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo avanzado muestra cómo especificar identidades (usuarios o grupos) para las cuales se debe verificar el acceso efectivo. La opción `returnDecisionText=TRUE` se usa para obtener resultados más legibles (por ejemplo, 'Authorized', 'Not Authorized') en lugar de los códigos numéricos. Aquí se verifica el acceso para 'sasadm' (un usuario típicamente administrador) y 'sasguest' (un usuario invitado) en una tabla de datos de ventas.
¡Copiado!
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 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo demuestra la flexibilidad de la acción `whatIsEffective` al aplicarla a una caslib completa en lugar de una tabla específica. También utiliza macro-variables (`%let`) para dinamizar los nombres de caslib y de grupo, lo cual es común en scripts SAS más complejos. Aquí se verifica el acceso efectivo del grupo `CASHostAccountUsers` a la caslib `casuser`.
¡Copiado!
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 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo más avanzado tiene como objetivo ilustrar la detección de filtros a nivel de fila por `whatIsEffective`. Crea una tabla, luego verifica el acceso para un administrador y un usuario hipotético (`user101`). Si previamente se hubiera configurado un filtro para `user101` en esta tabla (por ejemplo, para ver solo sus propias transacciones), la acción `whatIsEffective` lo indicaría con una decisión como 'Authorized with Filter'. El código para agregar dicho filtro se incluye a modo indicativo pero comentado, ya que requeriría privilegios administrativos y sería una acción separada.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved.