Habilitations sur les objets et licences sur les modules
Up ! 5GL permet de créer des applications utilisées en multi-utilisateurs. Sans contrôle particulier, chaque utilisateur, i.e chaque programme se connectant à un programme serveur, est en mesure de réaliser n'importe quelle opération sur n'importe quel objet. Par exemple :
- Création, modification ou destruction d'un objet.
- Consultation des propriétés d'un objet.
- Exécution des méthodes d'un objet.
Ce principe libéral, convenant parfaitement à des applications légères, pose les problèmes suivants :
- Dans une application où il n'y a pas d'habilitation, chaque programme peut accéder librement et modifier les informations conservées dans les entrepôts des serveurs.
Pour un système de gestion des ressources humaines, chacun serait en mesure de modifier, consulter et imprimer les bulletins de salaire des employés.
- Dans un système non sécurisé, chaque programme peut accéder librement et modifier le fonctionnement de l'application.
Pour un serveur d'objets, chacun est en mesure de rendre un entrepôt indisponible, de changer les priorités des tâches serveur, voire d'arrêter l'application.
- Dans un système sans licence, chaque programme peut être copié et exécuté sur n'importe quelle machine binaire compatible.
Une entreprise achetant une licence d'un logiciel écrit en Up ! 5GL pourrait l'installer et l'utiliser sur tous les ordinateurs compatibles possibles.
Up ! 5GL et Up ! Security Manager possède des fonctions permettant de gérer aisément ces situations. Ces fonctions sont débrayables de la sorte à ne pas pénaliser les applications légères.
En effet, ces fonctions sont utiles lorsque l'application comporte des fonctionnalités critiques ou ouverte sur Internet.
Sessions, utilisateurs et rôles
Sessions
Chaque tâche d'un programme possède une session de fonctionnement. Chaque programme client se connectant à un programme serveur comporte sur le serveur une session cliente de fonctionnement.
Une session regroupe les informations suivantes :
- Son identification par un numéro unique.
- L'habilitation de la session.
- Si une exception a été lancée, une référence vers celle-ci.
- L'état de la session.
- La table des synchronisations qu'elle a posées.
Une tâche est l'association entre un thread i.e. un moteur d'exécution du système d'exploitation pour le programme, une session et le traitement à réaliser. Up ! Application System étant multi-tâches, un thread peut gérer plusieurs sessions. Par exemple les tâches Serveur desservent plusieurs tâches clients. Pour avoir plus d'informations sur les tâches, veuillez vous référer à la fiche Les tâches.
Utilisateurs
Chaque session d'un programme est rattachée à un utilisateur d'Up ! Application System qui est différent de l'utilisateur servant à la connexion au système d'exploitation ou de celui employé pour l'accès à une base de données. Celui-ci lui confère des habilitations sur des objets. Pour les sessions des tâches utilisateurs, leurs sessions se connectent automatiquement sous l'utilisateur défini par le paramètre Connexion.
Sa valeur prend la forme de Utilisateur/MotDePasse tel :
monprogramme Connexion=scott/tiger
Il est possible de changer de connexion au cours du traitement d'une tâche au moyen de la procédure Connecter de Up ! Security Manager.
Les utilisateurs sont modélisés par le type Utilisateur de Up ! Security Manager. Ses méthodes permettent respectivement de :
- Créer un nouvel utilisateur.
- Supprimer un utilisateur déjà existant.
- Changer le mot de passe d'un utilisateur.
Rôles
Le rôle est une entité permettant de regrouper les utilisateurs de la sorte à pouvoir leur attribuer les mêmes habilitations tout en les distinguant. Les rôles sont classés sous forme d'un arbre dont les feuilles sont les utilisateurs. Une liste d'habilitations est associée à chaque rôle.
Les rôles sont modélisés par le type Role de Up ! Security Manager. Ces méthodes permettent respectivement de :
- Créer un nouveau rôle.
- Supprimer un rôle déjà existant.
- Rattacher un rôle à un autre rôle. En ce cas, le rôle rattaché hérite des habilitations du rôle de rattachement.
- Ajouter ou supprimer un utilisateur d'un rôle.
Utilisateurs particuliers
Pour les tâches propres à Up ! Object Management System ou à Up ! System, deux utilisateurs particuliers sont utilisés :
Nom de la tâche | Nom de l'utilisateur |
Alarme | Spoule |
Archivage | Spoule |
EnregistrementJournal | Spoule |
FichierEchange | Administrateur |
FileDAttente | Spoule |
Moniteur | Administrateur |
Retasser | Administrateur |
Serveur | Spoule |
Scruptateur | Spoule |
Statistiques | Spoule |
Ces utilisateurs sont automatiquement déclarés :
- Lors du premier lancement d'un programme en technologie Up ! Virtual Technical Machine persistant.
- A chaque lancement d'un programme en technologie Up ! Virtual Technical Machine non persistant.
Par défaut, ces deux utilisateurs n'ont pas de mot de passe.
Rôles particuliers
Pour les tâches propres à Up ! Object Management System ou à Up ! System, deux rôles particuliers sont utilisés :
Nom de l'utilisateur | Nom du rôle |
Administrateur | Administrateur |
Spoule | Public |
Ces rôles sont automatiquement déclarés :
- Lors du premier lancement d'un programme en technologie Up ! Virtual Technical Machine persistant.
- A chaque lancement d'un programme en technologie Up ! Virtual Technical Machine non persistant.
Le rôle Administrateur comporte au moins l'utilisateur dénommé Administrateur. Ce dernier comporte tous les droits sur tous les objets et cela est immuable. Il est possible de déclarer de nouveaux utilisateurs pour le rôle Administrateur avec des droits plus restreints.
Le rôle Public comporte au moins l'utilisateur dénommé Spoule. Il comporte aucun droit sur les objets de l'application nécessitant une habilitation. Il est possible de déclarer de nouveaux utilisateurs pour le rôle Public.
Mode de fonctionnement sans habilitation
Le mode de fonctionnement sans habilitation est utile pour les programmes légers : il est impensable de se signer avant d'utiliser la calculatrice de Windows !
Le mode de fonctionnement sans habilitation est activé si la fonction Principal ne comporte pas une déclaration d'habilitation via l'inflexion Habilitation.
En ce cas, le paramètre Connexion en local est facultatif.
Mode de fonctionnement avec habilitation
Le mode de fonctionnement avec habilitation est utile pour :
- Les programmes serveur d'objets.
Notamment via Internet.
- Les programmes utilisant les interfaces ou les méthodes de rappel.
Pour empêcher l'exécution de traitements indésirés via une extension non maîtrisée.
- Les programmes utilisant des modules interprétés.
Pour empêcher l'exécution de traitements indésirés via la modification des sources.
Le mode de fonctionnement avec habilitation est activé si la fonction Principal comporte une déclaration d'habilitation via l'inflexion Habilitation.
En ce cas, le paramètre Connexion en local est obligatoire.
Connexions à distance
Lorsque vous utilisez la répartition de traitements et de données via des modules distribués ou des entrepôts publics, il est nécessaire que votre application se connecte au serveur gérant ces modules ou ces entrepôts. Par défaut, l'utilisateur de connexion est celui utilisé pour la connexion locale.
Il est cependant possible de spécifier une connexion spécifique à un utilisateur particulier au moyen du paramètre multiple ConnexionServeur.
Sa valeur prend la forme de : Utilisateur/MotDePasse@NomDuNoeud.NomDuServeur. Voici un exemple :
monprogramme Connexion=scott/tiger ConnexionServeur1=smith/elephant@sun.finances
La procédure Connecter de Up ! Security Manager permet également de changer de connexion distante au cours du traitement d'une tâche.
Habilitations
Une habilitation est une autorisation portant sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type, sur une propriété d'un objet. Ce droit est donné pour un rôle.
Voici les combinaisons de droits possibles :
Cible du droit Droit | Module | Type | Objet | Procédure Fonction | Méthode | Propriété | Variable |
Création | Impossible | Possible | Impossible | Impossible | Impossible | Dynamique uniquement | Impossible |
Destruction | Impossible | Possible | Possible | Impossible | Impossible | Dynamique uniquement | Impossible |
Lecture | Impossible | Possible | Possible | Impossible | Impossible | Possible | Possible |
Modification | Impossible | Possible | Possible | Impossible | Impossible | Possible | Possible |
Exécution | Possible | Possible | Possible | Possible | Possible | Impossible | Impossible |
Les objets d'un type supportent les habilitations si le type possède l'attribut Habilitation. Il en est de même pour les propriétés d'un objet, les méthodes d'un objet ou les appels d'un module.
Les habilitations sont modélisées par les types Habilitations et HabilitationUnitaire de Up ! Security Manager selon la hiérarchie suivante :
Des méthodes du type Role de Up ! Security Manager permettent respectivement de :
- Ajouter une habilitation pour un rôle sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type, sur une propriété d'un objet.
- Modifier une habilitation pour un rôle sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type, sur une propriété d'un objet.
- Supprimer une habilitation pour un rôle sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type, sur une propriété d'un objet.
Sécurité de fonctionnement
Dès lors que les habilitations sont activées, Up ! Security Manager vérifie :
- La déclaration des utilisateurs et le respect des mots de passe.
- Les droits de création, d'usage ou de destruction d'un objet d'un type possédant l'attribut Habilitation.
- Les droits de création, d'usage ou de destruction d'une propriété d'un objet possédant l'attribut Habilitation.
- Les droits d'usage d'appel d'une procédure ou d'une méthode possédant l'attribut Habilitation.
- Les droits de création, d'usage ou de destruction d'une variable d'un objet possédant l'attribut Habilitation.
Si une vérification échoue alors :
Fichier de sécurité
Afin de séparer les programmes du plan de sécurité de l'entreprise, il est recommandé de créer un fichier de sécurité regroupant la définition des rôles, des utilisateurs et des habilitations.
Le fichier de sécurité est créé ou modifié par l'usage d'Up ! Security Manager en mode commande.
Il est rangé dans le répertoire ${UPS_HOME}/upssec/upssec/{UPS_LANGUAGE} en mode mono-utilisateur ou ${UPS_HOME}/upssec/upssec/${UPS_USER} en mode multi-utilisateur.
Le fichier de sécurité requis à l'exécution est désigné par le paramètre Securite. Voici un exemple :
monprogramme Connexion=scott/tiger Securite=masecurite.usc
Licence
Les licences permettent de définir des droits d'usage sur les modules composants l'application selon un classement en quatre catégories :
- Développement.
Le module peut être exécuté pour effectuer le développement d'une application.
- Personnalisation.
Le module peut être exécuté pour effectuer la personnalisation d'une application développée avec celui-ci.
- Exécution interactive.
Le module peut être exécuté et l'utilisateur peut interagir avec lui.
- Exécution batch.
Le module peut être exécuté et l'utilisateur ne peut interagir avec lui.
Un module licencié doit posséder l'attribut Licence. Un module faisant appel à un module licencié doit déclarer le mode d'usage qu'il en fait au moyen des attributs LicenceExpresse, LicenceStandard et LicenceEntreprise de l'instruction ImporterModule.
Une licence peut être limitée en nombre d'exécutions simultanées ou dans le temps.
Les licences sont modélisées par les types Licences et LicenceUnitaire de Up ! Security Manager selon la hiérarchie suivante :
Les méthodes du type LicenceUnitaire de Up ! Security Manager permettent de :
- Ajouter une licence.
- Supprimer une licence.
- Déployer une licence.
Les objets de ces types sont automatiquement créés à chaque lancement du programme en technologie Up ! Virtual Technical Machine.
Déploiement des licences
Par défaut, une licence n'est rattachée à aucune application et à aucun utilisateur. De ce fait, n'importe quel utilisateur de n'importe qu'elle application peut l'utiliser.
Il est possible de déployer une licence pour :
- Une application.
Elle est identifiée par son serveur logiciel rattaché à un noeud.
- Un utilisateur d'une application.
Il est identifié par son nom correspondant à la variable environnement UPS_USER.
Les licences peuvent être gérées localement ou au travers d'un serveur de licences qui doit être un noeud de la topologie gérée par Up ! Object Request Broker. Pour cela, il suffit d'utiliser le paramètre ServeurLicences.
Sa valeur prend la forme de NomDuNoeud.NomDuServeur. Voici un exemple :
monprogramme ServeurLicences=sun.finances
Les licences de tous les modules Up ! Application System sont conservées dans le fichier ${UPS_HOME}/upssec/upssec/upsaps.ulc. Ce fichier est mis à jour par Up ! Install lors de l'installation ou la désinstallation d'un module ou lors de la modification d'une licence.
Vérification des licences
Pour un module licencié, Up ! Virtual Technical Machine vérifie avant son chargement :
- Le droit d'usage du module selon le mode d'usage effectué par le programme.
- Le nombre d'usage simultané du module est inférieur ou égal au nombre de licences déclarées lors de l'installation.
- L'échéance de la licence n'est pas dépassée.
Si une vérification échoue alors :
- Cela est consigné dans le journal de sécurité.
Il s'agit du fichier ${UPS_HOME}/log/{UPS_APPLICATION}.log en mode mono-utilisateur ou ${UPS_HOME}/log/${UPS_USER}/{UPS_APPLICATION}.log en mode multi-utilisateur.
- L'exception LicenceViolee est envoyée.
L'exécution de la fonctionnalité demandée n'a pas lieu. Sauf si l'exception est attrapée, le programme s'arrête.