Attention, ce code est un héritage pur de SAS 9. Dans un environnement SAS Viya, la sécurité est déléguée à un micro-service d'identités souvent synchronisé avec un LDAP ou Azure AD. Bien que la compatibilité existe, l'audit natif sous Viya se fera via des appels API REST ou la CLI sas-viya, car les objets IdentityGroup ne sont plus stockés dans un serveur de métadonnées traditionnel.
Type : EXTERNE
Les données proviennent d'un serveur de métadonnées SAS 9 interrogé dynamiquement via des fonctions système. Aucune table physique n'est requise en entrée.
| 1 | options |
| 2 | metaserver="my.sas.server" |
| 3 | metaport=8561 |
| 4 | metauser="sasadm @saspw" |
| 5 | metapass="password" |
| 6 | metarepository=Foundation |
| 7 | metaprotocol=bridge; |
| 1 | DATA groups; |
| 2 | /* Initialize variables. */ |
| 3 | LENGTH type id group_uri group_name mgroup_uri |
| 4 | muser_uri m_name $ 50 m_dn group_dn $ 256; |
| 5 | call missing(of _character_); |
| 6 | label group_name = "Group Name" |
| 7 | group_dn = "Group Display Name" |
| 8 | m_name = "Member Name" |
| 9 | m_dn = "Member Display Name" |
| 10 | ; |
| 11 | |
| 12 | |
| 13 | /* Define initial query for groups. */ |
| 14 | group_obj="omsobj:IdentityGroup? @PublicType='UserGroup'"; |
| 15 | |
| 16 | /* Test query for results. */ |
| 17 | group_count=metadata_resolve(group_obj,type,id); |
| 18 | put "NOTE: Found " group_count "User Groups"; |
| 19 | IF group_count > 0 THEN DO n=1 to group_count; |
| 20 | |
| 21 | /* If groups are found, get each group's name and display name. */ |
| 22 | rc=metadata_getnobj(group_obj,n,group_uri); |
| 23 | rc=metadata_getattr(group_uri,"Name",group_name); |
| 24 | rc=metadata_getattr(group_uri,"DisplayName",group_dn); |
| 25 | |
| 26 | /* Test for presence of members associated with the group. */ |
| 27 | muser_count=metadata_getnasn(group_uri,"MemberIdentities",1,muser_uri); |
| 28 | IF muser_count > 0 THEN DO o=1 to muser_count; |
| 29 | |
| 30 | /* If found, extract each associated user's name and display name. */ |
| 31 | rc=metadata_getnasn(group_uri,"MemberIdentities",o,muser_uri); |
| 32 | rc=metadata_getattr(muser_uri,"Name",m_name); |
| 33 | rc=metadata_getattr(muser_uri,"DisplayName",m_dn); |
| 34 | OUTPUT; |
| 35 | call missing (m_name,m_dn); |
| 36 | END; |
| 37 | ELSE DO; |
| 38 | put "NOTE: No members of group " group_name group_dn; |
| 39 | OUTPUT; |
| 40 | END; |
| 41 | END; |
| 42 | ELSE put "ERROR: No groups found"; |
| 43 | keep group_name group_dn m_name m_dn ; |
| 1 | |
| 2 | PROC REPORT |
| 3 | DATA=groups; |
| 4 | column group_name group_dn m_name m_dn ; |
| 5 | RUN; |
| 6 |