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:
- Connectez SSMS Object Explorer à l'instance SQL Server
- Développer
Server Objects
, clic droitLinked Servers
et clic gaucheNew Linked Server...
- Sous l'
General
onglet choisissezSQL Server
pourServer type
et écrire le nom du serveur - Sous l'
Security
onglet dans la partie supérieureAdd
, cliquez sur , choisissez "sa" asLocal Login
, entrezRemote User
le nom deRemote Password
- Sous l'
Security
onglet dans la partie inférieure (sousFor a login not defined in the list above, connections will:
), choisissez la première option:Not be made
- Cliquez
OK
et commencez 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
dans les deux cas.
sql-server
security
ssms
linked-server
Roi Gavish
la source
la source
Réponses:
Il n'existe aucun moyen de «masquer» un serveur lié ou d'empêcher des utilisateurs non autorisés d' 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:
sys.servers
pour voir la liste des serveurs liés.J'ai pu exécuter la requête suivante sans problème:
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:
A généré cette erreur:
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 tout à fait), 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:
la source
Vous pouvez utiliser la première option "Ne pas être fait avec" un mappage de connexion comme ci-dessous:
Voici le résultat avec la connexion mappée:
Et voici ce qui se passe avec un autre compte
la source