Bonjour à tous,
On me demande de résoudre le problème suivant (désolé, le message est assez long mais assez simple à comprendre) : jusqu'à présent, notre base de données BO ne contenait que les données de notre société (société A). Récemment, notre maison mère a fait l'acquisition d'une nouvelle société (société B) et les données de cette société B tomberont dans la même base BO que celles de la société A : la base de données BO contiendra donc à la fois les données de la société A et de la société B.
La distinction entre ces 2 sociétés se fait par un champ contenant le code société (nommé CPY) : A ou B. Ce champ n'est pas présent dans toute les tables de la base BO mais - pour le moment du moins - uniquement dans certaines tables de dimensions : les tables de tiers (clients, fournisseurs, prestataires) et celle contenant les données des salariés des sociétés A et B.
Les tables sans données confidentielles et pouvant être utilisées de la même façon pour les deux sociétés (tables de libellés) n'ont évidemment pas reçu le champ CPY, la distinction entre les 2 sociétés étant sans intérêt ici.
Le champ CPY n'a pas non plus été redescendu dans les tables de faits (devis, commandes, etc.) mais cela peut se faire si cela s'avère nécessaire à la résolution de mon problème.
Voici donc le problème en lui-même :
- Les salariés des sociétés A et B doivent pouvoir accéder via Webi aux données de leurs sociétés respectives, mais en aucun cas aux données de l'autre société.
- Les administrateurs doivent pouvoir accéder aux données des sociétés A et B simultanément.
- Je souhaite ne pas doublonner les univers : l'univers des commandes actuel doit pouvoir servir aux 2 sociétés.
- La solution à mettre en œuvre doit être la plus simple et la plus rapide possible parce que j'ai 39 univers qui sont concernés.
J'ai fait quelques essais, et pour le moment, la seule solution que je trouve est de passer par la gestion des restriction d'accès (Outils / Gérer la sécurité / Gérer les restrictions d'accès) :
- Je crée 2 restrictions d'accès nommées respectivement "Société A" et "Société B". Les restrictions sont définies dans l'onglet "Lignes" et sont respectivement de la forme T_CLIENTS.CPY = 'A' et T_CLIENTS.CPY = 'B'. Bien-sûr, toutes les tables concernées dans l'univers sont traitées de la même manière ici. Les restrictions sont combinées avec l'opérateur AND.
- Parallèlement à cela, j'ai créé dans la CMC deux groupes nommés "Groupe A" et "Groupe B" auxquels j'ai affecté respectivement les salariés des sociétés A et B. Les administrateurs n'ont pas été affectés à ces groupes pour ne pas subir les restrictions.
- J'ai ensuite appliqué la restriction "Société A" à "Groupe A" et la restriction "Société B" à "Groupe B".
Après essai de login en tant que salarié de la société A puis de la société B, le résultat est assez concluant : les données sont correctement filtrées.
Par contre, je trouve que d'une part la mise en œuvre est assez longue et fastidieuse, et d'autre part il me reste un problème à résoudre : dans Webi, lorsqu'un utilisateur de la société A sélectionne des objets d'une table contenant le champ CPY, un filtre est automatiquement ajouté au code SQL généré pour restreindre les données retournées aux seules données de la société A. Ca c'est formidable. Malheureusement, je n'arrive pas à trouver comment bloquer l'accès au SQL personnalisé dans le visualiseur SQL de Webi : en effet, rien n'empêche l'utilisateur d'éditer le code de la requête, de supprimer le filtre sur la société, puis d'actualiser les données... Côté sécurité, c'est raté...
J'ai donc deux questions :
- La solution vers laquelle je m'oriente est-elle la plus simple selon vous pour répondre à mon besoin ?
- Si oui, comment interdire la modification du code SQL généré automatiquement par BO, y compris pour les états présents dans les favoris des utilisateurs ? A noter qu'ils doivent pouvoir conserver la liberté de modifier les requêtes via les objets mis à disposition dans l'univers.
Merci d'avance pour votre aide et bonne fin de journée.
Partager