Cette action nécessite des droits élevés.
Code élévation : proc cas; accessControl.assumeRole / adminRole="superuser"; run;
Valide de manière permanente toutes les modifications effectuées au sein d'une transaction de contrôle d'accès. Cette action enregistre les changements sur le serveur, libère tous les objets qui avaient été réservés (check-out) et met fin à la transaction. C'est l'étape finale et irréversible pour appliquer un ensemble de modifications de sécurité de manière atomique.
Ce bloc de code crée une nouvelle caslib nommée 'SalesData' et y charge la table 'CARS' pour servir de base aux exemples de contrôle d'accès. La table est promue pour être accessible à toutes les sessions.
| 1 | |
| 2 | PROC CAS; |
| 3 | caslib SalesData path='/tmp/sales' dataSource={srcType='path'}; |
| 4 | loadTable / caslib='casuser' path='cars.sashdat' casOut={caslib='SalesData', name='cars', promote=true}; |
| 5 | |
| 6 | RUN; |
| 7 | |
| 8 | QUIT; |
| 9 |
Cet exemple montre le cycle complet : démarrer une transaction, ajouter un contrôle d'accès simple (accorder la permission 'Select' au groupe 'Public' sur la table 'CARS'), puis valider la transaction avec `commitTransaction`.
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.assumeRole / adminRole='superuser'; |
| 4 | |
| 5 | RUN; |
| 6 | ACCESSCONTROL.startTransaction; |
| 7 | |
| 8 | RUN; |
| 9 | ACCESSCONTROL.updSomeAcsTable / caslib='SalesData' TABLE='cars' principal='Public' perm='Select' grant='add'; |
| 10 | |
| 11 | RUN; |
| 12 | ACCESSCONTROL.commitTransaction; |
| 13 | |
| 14 | RUN; |
| 15 | |
| 16 | QUIT; |
| 17 |
Cet exemple plus avancé illustre comment remplacer intégralement tous les contrôles d'accès sur une caslib, puis valider ces changements. Après avoir assumé un rôle d'administrateur, une transaction est démarrée. `repAllAcsCaslib` est utilisé pour définir un nouvel ensemble de règles (donner le droit de lecture à 'testuser'). Enfin, `commitTransaction` rend ces changements permanents. L'action `listAcsCaslib` est utilisée à la fin pour vérifier que les nouveaux droits sont bien en place.
| 1 | |
| 2 | PROC CAS; |
| 3 | ACCESSCONTROL.assumeRole / adminRole='superuser'; |
| 4 | |
| 5 | RUN; |
| 6 | ACCESSCONTROL.startTransaction; |
| 7 | |
| 8 | RUN; |
| 9 | ACCESSCONTROL.repAllAcsCaslib / caslib='SalesData' acs={{principal='testuser', perm='ReadInfo', grant='add'}}; |
| 10 | |
| 11 | RUN; |
| 12 | ACCESSCONTROL.commitTransaction; |
| 13 | |
| 14 | RUN; |
| 15 | ACCESSCONTROL.listAcsCaslib / caslib='SalesData'; |
| 16 | |
| 17 | RUN; |
| 18 | |
| 19 | QUIT; |
| 20 |