Verbindungsserver für Benutzer ohne Berechtigungen verfügbar

9

Ich habe Benutzer, die einen Verbindungsserver sehen, den sie nicht sehen sollen.

Der Verbindungsserver ist so definiert, dass nur ich Zugriff darauf habe, aber jeder kann ihn sehen und verwenden.

Ich habe den neuen Verbindungsserver mit den folgenden Schritten erstellt:

  1. Verbinden Sie den SSMS-Objekt-Explorer mit der SQL Server-Instanz
  2. Erweitern Server Objects, Rechtsklick Linked Serversund LinksklickNew Linked Server...
  3. GeneralWählen Sie unter der Registerkarte den Servernamen SQL Serveraus Server typeund schreiben Sie ihn
  4. Wählen Sie unter der SecurityRegisterkarte im oberen Teil Add"sa" aus Local Login, geben Sie Remote Userden Namen und einRemote Password
  5. Wählen Sie unter der SecurityRegisterkarte im unteren Teil (unter For a login not defined in the list above, connections will:) die erste Option:Not be made
  6. Klicken Sie auf OKund starten Sie den Test

Jetzt ist die einzige Person, die den Verbindungsserver sehen soll, ich ("sa"), aber irgendwie können andere Benutzer ihn sehen und verwenden.

Hinweis 1: Die Benutzer, die den Verbindungsserver verwenden können, haben Berechtigungen für den Remoteserver. Sie sehen keine Daten, die sie nicht sehen sollten. Sie können nur vom Verbindungsserver aus darauf zugreifen, wenn sie dies nicht können sollten.

Anmerkung 2: Ich bin sysadminin beiden Fällen der einzige .

Roi Gavish
quelle
1
Nun, Sie können den Verbindungsserver nicht wirklich verstecken, aber wenn sie versuchen, ihn zu verwenden, wenn ihr aktueller Anmeldekontext am anderen Ende keine Berechtigungen hat ...
Aaron Bertrand
@AaronBertrand Sie können einen Verbindungsserver einfach ausblenden, indem Sie keinen Zugriff darauf gewähren. Ein Login, der nicht in der Liste der zulässigen Logins definiert ist und kein Systemadministrator ist, kann den Verbindungsserver im Objekt-Explorer nicht sehen.
Roi Gavish
@AaronBertrand Wenn ihr aktueller Anmeldekontext am anderen Ende über Berechtigungen verfügt, sollten sie immer noch keine Verbindung über den Verbindungsserver herstellen können, wenn dies nicht zulässig ist.
Roi Gavish
1
Nein, Sie können den Verbindungsserver nicht auf diese Weise ausblenden. Hast du das versucht?
Aaron Bertrand

Antworten:

7

Es gibt keine Möglichkeit, einen Verbindungsserver zu "verstecken" oder zu verhindern, dass nicht autorisierte Benutzer versuchen, ihn zu verwenden. Sie können lediglich steuern, ob sie tatsächlich Zugriff auf der anderen Seite haben. Ein Verbindungsserver an und für sich ist kein tatsächliches Objekt. Wie bei einem Synonym gewähren Sie keinen Zugriff auf den Alias, sondern nur auf die Objekte, auf die er verweist.

Probieren Sie es aus und Sie werden sehen, dass einige Ihrer Annahmen (z. B. "ein Login ... kann den Verbindungsserver im Objekt-Explorer nicht sehen") falsch sind. Ich war das:

  1. Erstellt ein Login und gewährt keinerlei Berechtigungen, nur CONNECT / öffentliche Rolle.
  2. Erstellt einen Verbindungsserver und hat diese Anmeldung nicht zur Liste der Anmeldungen hinzugefügt.
  3. Öffnete eine neue Instanz von Management Studio und stellte eine Verbindung mit dieser Anmeldung her.
  4. Ich konnte alle Verbindungsserver unter Serverobjekte> Verbindungsserver anzeigen.
  5. Ich konnte auch abfragen sys.servers, um die Liste der Verbindungsserver anzuzeigen.

Ich konnte die folgende Abfrage problemlos ausführen:

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

Ich konnte jedoch keine Abfragen für Nicht-Systemdatenbanken ausführen, da ich keinen expliziten Zugriff auf Nicht-Systemdatenbanken oder die darin enthaltenen Objekte gewährt hatte. Z.B:

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

Hat diesen Fehler ergeben:

Nachricht 7314, Ebene 16,
Status 1, Zeile 1 Der OLE DB-Anbieter "SQLNCLI11" für den Verbindungsserver "Verbindungsserver" enthält nicht die Tabelle "" AdventureWorks2012 "." Sales "." SalesOrderHeader "". Die Tabelle ist entweder nicht vorhanden oder der aktuelle Benutzer hat keine Berechtigungen für diese Tabelle.

Ich gehe davon aus, dass Sie restriktivere Ergebnisse erzielen können, indem Sie den Zugriff auf bestimmte Objekte auf dem Verbindungsserver (oder DENY CONNECT SQLauf diese Anmeldung insgesamt) explizit verweigern. Dies beschränkt jedoch nicht die Auswirkungen auf den Verbindungsserver. Dies betrifft auch direkte Verbindungen.

Auf jeden Fall verstehe ich nicht, worum es Ihnen geht:

  1. Wenn der Benutzer auf der anderen Seite keinen Zugriff hat, was schadet es dann, wenn er es versucht ? (Vielleicht haben Sie besseres Glück, wenn Sie ihnen sagen, dass sie es nicht tun und prüfen sollen, als wenn Sie versuchen, sie daran zu hindern, es überhaupt zu versuchen.)
  2. Wenn der Benutzer tut Zugang auf der anderen Seite hat, warum können sie nicht den Verbindungsserver verwenden?
Aaron Bertrand
quelle
2

Sie können die erste Option "Nicht erstellt mit" für eine Anmeldezuordnung wie folgt verwenden:

Geben Sie hier die Bildbeschreibung ein

Hier ist das Ergebnis mit dem zugeordneten Login:

Geben Sie hier die Bildbeschreibung ein

Und hier ist, was mit einem anderen Konto passiert

Geben Sie hier die Bildbeschreibung ein

PollusB
quelle