web-dev-qa-db-fra.com

Serveur lié disponible pour les utilisateurs sans autorisations

J'ai des utilisateurs qui voient un serveur lié qu'ils ne sont pas censés voir.

Le serveur lié est défini de sorte que seul j'y ai accès, mais tout le monde peut le voir et l'utiliser.

J'ai créé le nouveau serveur lié en suivant les étapes suivantes:

  1. Connectez SSMS Object Explorer à l'instance SQL Server
  2. Développez Server Objects, Cliquez avec le bouton droit sur Linked Servers Et cliquez avec le bouton gauche sur New Linked Server...
  3. Sous l'onglet General, choisissez SQL Server Pour Server type Et écrivez le nom du serveur
  4. Sous l'onglet Security dans la partie supérieure, cliquez sur Add, choisissez "sa" comme Local Login, Entrez le nom de Remote User Et Remote Password
  5. Sous l'onglet Security dans la partie inférieure (sous For a login not defined in the list above, connections will:), Choisissez la première option: Not be made
  6. Cliquez sur OK et lancez les tests

Maintenant, la seule personne censée voir le serveur lié est moi ("sa"), mais d'une manière ou d'une autre les autres utilisateurs peuvent le voir et l'utiliser.

Remarque 1: les utilisateurs qui peuvent utiliser le serveur lié ont des autorisations sur le serveur distant, ils ne voient pas les données qu'ils ne devraient pas voir, ils peuvent simplement y accéder à partir du serveur lié alors qu'ils ne devraient pas pouvoir.

Remarque 2: je suis le seul sysadmin sur les deux instances.

9
Roi Gavish

Il n'y a aucun moyen de "cacher" un serveur lié ou d'empêcher les utilisateurs non autorisés de essayer de l'utiliser. Tout ce que vous pouvez contrôler, c'est s'ils ont réellement accès de l'autre côté. Un serveur lié en soi n'est pas un objet réel; comme un synonyme, vous n'accordez pas l'accès à l'alias, uniquement aux éléments auxquels il fait référence.

Essayez-le et vous verrez que certaines de vos hypothèses (par exemple, "une connexion ... ne peut pas voir le serveur lié dans l'Explorateur d'objets") sont fausses. J'ai fait ça:

  1. A créé une connexion et n'a accordé aucun privilège, juste CONNECTER/rôle public.
  2. A créé un serveur lié et n'a pas ajouté cette connexion à la liste des connexions.
  3. Ouverture d'une nouvelle instance de Management Studio, connexion avec cette connexion.
  4. J'ai pu voir tous les serveurs liés sous Objets serveur> Serveurs liés.
  5. J'ai également pu interroger sys.servers pour voir la liste des serveurs liés.

J'ai pu exécuter la requête suivante sans problème:

SELECT name FROM [linked server].master.sys.objects;

Cependant, je n'ai pas pu exécuter de requêtes sur des bases de données non système, car je n'avais pas accordé d'accès explicite à une base de données non système ou aux objets à l'intérieur. Par exemple.:

SELECT SalesOrderID FROM [linked server].AdventureWorks2012.Sales.SalesOrderHeader;

A généré cette erreur:

Msg 7314, niveau 16, état 1, ligne 1
Le fournisseur de base de données OLE "SQLNCLI11" pour le serveur lié "serveur lié" ne contient pas la table "" AdventureWorks2012 "." Sales "." SalesOrderHeader "". La table soit n'existe pas ou l'utilisateur actuel n'a pas d'autorisations sur cette table.

Je m'attends à ce que vous puissiez obtenir des résultats plus restrictifs en refusant explicitement l'accès à des objets spécifiques sur le serveur lié (ou par DENY CONNECT SQL à cette connexion), mais cela ne limite pas son effet au serveur lié; elle affecte également les connexions directes.

En tout cas, je ne vois pas l'intérêt de ce que vous essayez d'accomplir:

  1. Si l'utilisateur n'a pas accès de l'autre côté, quel est le mal à le laisser essayer? (Vous pourriez avoir plus de chance de leur dire de ne pas le faire et de les auditer que d'essayer de les empêcher d'essayer en premier lieu.)
  2. Si l'utilisateur ne a accès de l'autre côté, pourquoi ne peut-il pas utiliser le serveur lié?
7
Aaron Bertrand

Vous pouvez utiliser la première option "Ne pas être fait avec" un mappage de connexion comme ci-dessous:

enter image description here

Voici le résultat avec la connexion mappée:

enter image description here

Et voici ce qui se passe avec un autre compte

enter image description here

2
PollusB