Bonjour,
J'ai le scénario suivant :
L'utilisateur "monuser@mondomain.local" doit se connecter à partir d'un serveur (IIS) APPSRV à une instance SQL Server hébergée sur BDDSRV.
Sur cette instance, je dois mettre un serveur lié ERPSRV qui contient une base de données MYBDD contenant une vue dbo.ma_vue qui effectue un SELECT sur des tables d'une autre base de ERPSRV "ERP".
Le but du jeu, c'est, dans ces conditions, de pouvoir exécuter une requête SELECT sur la vue.
J'ai créé, non sans mal, le serveur lié (l'utilisateur sysadmin de BDDSRV n'a pas accès au serveur ERPSRV, et l'utilisateur monuser@mondomain.local a le rôle "public" sur le serveur BDDSRV et ERPSRV). Du coup j'ai des erreurs quand je crée le serveur lié, mais si je l'interroge avec mon user, ça a fini par passer.
Ensuite, pour des raisons de sécurité, on souhaite masquer complètement la base "ERP" du serveur "ERPSRV" à l'utilisateur monuser@mondomain.local.
Sauf que si on ne le mappe pas à la base ERP, impossible d'interroger la vue dbo.mavue qui se trouve dans la base MYBDD.
Et même pire que ça, même une fois que l'utilisateur a le rôle "public" dans la base ERP, et qu'on a bien donné le droit "SELECT" sur MYBDD.dbo.mavue on n'arrive toujours pas à interroger la vue sans donner explicitement le droit SELECT sur les tables de la base ERP utilisées par la vue MYBDD.dbo.mavue
Et là ça nous ennuie beaucoup : à la base, on ne veut pas que l'utilisateur monuser@mondomain.local n'ait même connaissance de l'existence de la base ERP.
J'ai dû rater un truc, car habituellement, si j'interdit à un utilisateur de lire dans une table, mais que je l'autorise à lire une vue qui utilise cette table, j'arrive sans souci à lire la vue.
=> Alors pourquoi quand il s'agit vue sur un serveur lié qui pointe sur une autre base ça ne fonctionne pas de la même manière ?
Enfin, et là c'est autant IIS que SQL Server, j'arrive pas à comprendre un comportement de Windows et/ou SQL Server.
Si depuis BDDSRV j'ouvre management studio et que je me connecte à l'instance locale avec l'utilisateur "monuser@mondomain.local", je peux exécuter la requête suivante :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from ERPSRV.MYBDD.dbo.mavue
Ca fonctionne (une fois que j'ai autorisé mon user à voir la terre entière)
Si depuis APPSRV j'exécute une page ASPX qui se connecte directement à ERPSRV dans la base master par exemple, avec le compte "monuser@mondomain.local" la requête suivante fonctionne :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from MYBDD.dbo.mavue
Si toujours depuis la même page, je me connecte toujours avec le même compte, cette fois à BDDSRV dans la base master, et que je tente d'utiliser le serveur lié :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from ERPSRV.MYBDD.dbo.mavue
J'obtiens un message comme quoi "AUTORITE NT\Anonymous" n'a pas le droit de se connecter à la base de donnée.
=> Il sort d'où ce Anonymous ?
J'avoue que je ne comprends pas du tout ce qu'il se passe.
BDDSRV est en SQL Server 2017
ERPSRV est en SQL Server 2012
Tout le monde est dans le même domaine/sous-réseau
Partager