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!
/* 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' */
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!
/* 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 */
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!
/* 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 */
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!
/* 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'. */
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.