Scénario de test & Cas d'usage
Gestión de derechos de acceso y seguridad de datos.
Descubrir todas las acciones de accessControlSe crea una tabla de clientes (`CLIENTES_SENSIBLES`) y se carga en una caslib (`AUDIT_CAS`) a la que un usuario estándar ('sasdemo') no tiene acceso por defecto.
| 1 | DATA casuser.clientes_sensibles; |
| 2 | LENGTH id_cliente $ 10 nombre $ 50 direccion $ 100; |
| 3 | DO i = 1 to 100; |
| 4 | id_cliente = 'CUST' || put(i, z4.); |
| 5 | nombre = 'Cliente ' || put(i, z4.); |
| 6 | direccion = 'Dirección Confidencial ' || put(i, z4.); |
| 7 | OUTPUT; |
| 8 | END; |
| 9 | RUN; |
| 1 | PROC CAS; |
| 2 | /* 1. Crear caslib restringida (como admin) */ |
| 3 | addCaslib / caslib='AUDIT_CAS' dataSource={srcType='path'} path='/tmp/audit_data' subdirs=true; |
| 4 | |
| 5 | /* 2. Cargar la tabla en la caslib restringida */ |
| 6 | TABLE.promote / caslib='casuser' name='clientes_sensibles' targetCaslib='AUDIT_CAS'; |
| 7 | |
| 8 | /* 3. Como usuario 'sasdemo', intentar acceder a la tabla (debe fallar) */ |
| 9 | TABLE.tableInfo / caslib='AUDIT_CAS' name='clientes_sensibles'; |
| 10 | RUN; |
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.assumeRole / adminRole=' |
| 4 | DATA'; |
| 5 | RUN; |
| 6 |
| 1 | |
| 2 | PROC CAS; |
| 3 | TABLE.tableInfo / caslib='AUDIT_CAS' name='clientes_sensibles'; |
| 4 | RUN; |
| 5 |
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.listRoles / all=true; |
| 4 | /* Se espera un error de autorización */ |
| 5 | RUN; |
| 6 |
| 1 | PROC CAS; |
| 2 | ACCESSCONTROL.dropRole / adminRole='DATA'; |
| 3 | TABLE.tableInfo / caslib='AUDIT_CAS' name='clientes_sensibles'; /* Debería fallar de nuevo */ |
| 4 | RUN; |
El escenario demuestra que el rol 'DATA' otorga acceso temporal a recursos de datos restringidos sin conceder otros privilegios administrativos. Al abandonar el rol, el acceso se revoca correctamente, validando el ciclo completo de elevación y descenso de privilegios.