Publicado el :
Administración CREATION_INTERNE

Filtrado Simple a Nivel de Fila

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.
Este ejemplo modifica el acceso a una tabla CAS (`tableA`) para que un usuario específico (`userA`) solo pueda acceder a las filas donde el valor de la columna `Make` sea 'Ford'. Muestra el uso de la acción `accessControl.updSomeAcsTable` para asignar permisos de 'Select' y 'ReadInfo' con una condición de filtrado a nivel de filas. Se asume que el usuario no tiene ya un acceso `ReadInfo` a la tabla. Los ejemplos incluyen la creación de una tabla CAS temporal para asegurar la autonomía.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados a través de un DATA Step con Datalines, cargados luego en CAS (caslib 'casuser').

1 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo crea una tabla llamada 'Cars' en la caslib 'casuser'. Luego, utiliza la acción `accessControl.updSomeAcsTable` para asignar a 'userA' los permisos de 'Select' y 'ReadInfo' sobre esta tabla. El permiso 'Select' va acompañado de un filtro, garantizando que 'userA' solo pueda ver las filas donde la columna 'Make' tiene el valor 'Ford'.
¡Copiado!
1/* Création de données d'exemple dans CAS */
2DATA casuser.Cars;
3 INFILE DATALINES;
4 INPUT Make $ Model $ Price;
5 DATALINES;
6Ford Focus 20000
7Ford Mustang 35000
8Honda Civic 22000
9Honda CRV 28000
10Toyota Camry 25000
11Chevrolet Cruze 21000
12;
13RUN;
14 
15/* Charger la table dans CAS */
16PROC CAS;
17 SESSION casauto;
18 TABLE.promote /
19 caslib='casuser'
20 name='Cars'
21 replace=true;
22 RUN;
23QUIT;
24 
25/* Appliquer le filtre de sécurité au niveau ligne pour 'userA' */
26/* Note: 'userA' doit exister dans l'environnement SAS Viya */
27PROC CAS;
28 SESSION casauto;
29 ACCESSCONTROL.updSomeAcsTable /
30 acs={
31 {caslib="casuser",
32 TABLE="Cars",
33 identity="userA",
34 identityType="User",
35 permType="Grant",
36 permission="Select",
37 filter="Make='Ford'"},
38 {caslib="casuser",
39 TABLE="Cars",
40 identity="userA",
41 identityType="User",
42 permType="Grant",
43 permission="ReadInfo"}
44 };
45RUN;
46QUIT;
2 Bloque de código
PROC CAS
Explicación :
Este ejemplo extiende el concepto de filtrado aplicando un filtro más complejo para 'userB'. Este filtro permite a 'userB' ver las filas donde 'Make' es 'Honda' O 'Price' es mayor a 25000. Además de los permisos 'Select' y 'ReadInfo', 'userB' también recibe el permiso 'Update' sobre la tabla filtrada.
¡Copiado!
1/* Assurez-vous que la table 'Cars' existe et est chargée comme dans l'Exemple 1 */
2/* Si non, exécuter la partie de création de données de l'Exemple 1 */
3 
4/* Appliquer un filtre plus complexe et des permissions additionnelles pour 'userB' */
5/* Note: 'userB' doit exister dans l'environnement SAS Viya */
6PROC CAS;
7 SESSION casauto;
8 ACCESSCONTROL.updSomeAcsTable /
9 acs={
10 {caslib="casuser",
11 TABLE="Cars",
12 identity="userB",
13 identityType="User",
14 permType="Grant",
15 permission="Select",
16 filter="Make='Honda' OR Price > 25000"},
17 {caslib="casuser",
18 TABLE="Cars",
19 identity="userB",
20 identityType="User",
21 permType="Grant",
22 permission="ReadInfo"},
23 {caslib="casuser",
24 TABLE="Cars",
25 identity="userB",
26 identityType="User",
27 permType="Grant",
28 permission="Update"}
29 };
30RUN;
31QUIT;
3 Bloque de código
PROC CAS
Explicación :
Este ejemplo ilustra cómo usar una macro-variable SAS (`selected_make`) para insertar dinámicamente un valor en la condición de filtro. Esto simula un filtro dinámico sin necesidad de recodificar la acción. 'userC' tendrá acceso filtrado para los coches de marca 'Toyota'.
¡Copiado!
1/* Assurez-vous que la table 'Cars' existe et est chargée comme dans l'Exemple 1 */
2/* Si non, exécuter la partie de création de données de l'Exemple 1 */
3 
4%let selected_make = Toyota;
5 
6/* Appliquer le filtre de sécurité avec une valeur dynamique pour 'userC' */
7/* Note: 'userC' doit exister dans l'environnement SAS Viya */
8PROC CAS;
9 SESSION casauto;
10 ACCESSCONTROL.updSomeAcsTable /
11 acs={
12 {caslib="casuser",
13 TABLE="Cars",
14 identity="userC",
15 identityType="User",
16 permType="Grant",
17 permission="Select",
18 filter="Make='%upcase(&selected_make)'"},
19 {caslib="casuser",
20 TABLE="Cars",
21 identity="userC",
22 identityType="User",
23 permType="Grant",
24 permission="ReadInfo"}
25 };
26RUN;
27QUIT;
4 Bloque de código
PROC CAS
Explicación :
Este ejemplo muestra cómo revocar los permisos (y, por lo tanto, el filtro de filas asociado) que se atribuyeron previamente a 'userA' sobre la tabla 'Cars'. La acción `accessControl.dropSomeAcsTable` con `permType='Revoke'` se utiliza para retirar los permisos 'Select' y 'ReadInfo', lo que también anula el filtro a nivel de filas para estos permisos. Después de esta operación, 'userA' ya no tendrá el acceso filtrado.
¡Copiado!
1/* Assurez-vous qu'un filtre existe pour 'userA' comme dans l'Exemple 1 */
2 
3/* Suppression des permissions de sélection et ReadInfo pour 'userA' sur 'Cars' avec le filtre */
4PROC CAS;
5 SESSION casauto;
6 ACCESSCONTROL.dropSomeAcsTable /
7 acs={
8 {caslib="casuser",
9 TABLE="Cars",
10 identity="userA",
11 identityType="User",
12 permType="Revoke", /* Utiliser Revoke pour supprimer les permissions */
13 permission="Select"},
14 {caslib="casuser",
15 TABLE="Cars",
16 identity="userA",
17 identityType="User",
18 permType="Revoke",
19 permission="ReadInfo"}
20 };
21RUN;
22QUIT;
23 
24/* Après exécution, 'userA' n'aura plus les permissions 'Select' et 'ReadInfo' sur la table 'Cars', et le filtre de lignes associé sera supprimé. */
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.