2010-12-09 6 views
0

Mein Ziel ist es, direkten Benutzerzugriff auf den Datenbankserver zu verhindern. Eine Möglichkeit besteht darin, einen WCF-Dienst oder Webdienst in der Mitte zwischen der Front-End-Anwendung und dem Datenbankserver zu erstellen.Datenbankzugriff Identitätswechsel

Zunächst werden die Benutzer für die Anwendung authentifiziert. Anschließend stellt die Anwendung über den WCF-Dienst eine Verbindung her, um Geschäftslogikoperationen auszuführen. Der WCF-Dienst führt die datenbankbezogenen Vorgänge mit einem Windows-Konto aus. Dadurch wird verhindert, dass andere Benutzer direkt auf den Datenbankserver zugreifen, da die Berechtigung nur einem bestimmten Windows-Konto erteilt wird.

Hier sind meine Fragen: Obwohl der Datenbankzugriff nur einem Windows-Konto gewährt wird und die WCF dieses Windows-Konto für datenbankbezogene Vorgänge verwendet, ist es möglich, alle datenbankbezogenen Vorgänge mit den Anmeldeinformationen des Protokollierten zu markieren im Benutzer?

aktualisieren
Danke für die Antworten. Scheint, als ob das obige Szenario nicht erreichbar ist. Ich untersuche derzeit die SQL 2008 Application Role-Funktion. Eines der Beispiele ist here. Aber nach weiteren Untersuchungen gibt es offensichtlich ein Problem mit dem Verbindungs-Pooling.

aktualisieren
Es ist ein Stapelüberlauf-Thread here in Bezug auf SQL Server-Anwendungsrolle

+0

Ich weiß nicht, dass jemand Anwendungsrollen verwendet ... – gbn

Antwort

0

Sie müssten jeden Benutzer in sys.server_principals eingerichtet haben, um Kontextwechsel wie EXECUTE AS zu aktivieren, was bedeuten würde, dass sie sowieso direkten DB-Zugriff haben.

Wenn Sie Kerberos/Delegation aktiviert haben, gilt das Gleiche. Verbindungen One und Two

Sie müssten den Benutzernamen als Parameter bei jedem SQL-Aufruf übergeben, oder vielleicht CONTEXT_INFO verwenden.

Hinweis: Jeder MS Office-Benutzer verfügt über MSQRY32.EXE, das als Abfragetool fungiert. Wenn Sie keinen direkten DB-Zugriff wünschen, müssen Sie sicherstellen, dass keine Berechtigungen gesetzt oder gewährt sind.

0

abhängig.

Wenn Ihre Datenbank und WCF-Dienst auf der gleichen Box sind und Sie eine Menge Jiggery Poker machen, um zu imitieren, dann ist es möglich. Sobald Sie Ihre DB in eine andere Box verschieben, funktioniert sie nicht mehr.

Dies ist eine bekannte Einschränkung und der Grund ist Identitätswechsel wird ein Token erstellen, die Sie zu einer Box, aber das ist nicht passierbar auf eine andere Box. Ich habe versucht, den Q & A zu finden, wo der MS-Typ geantwortet hatte, aber immer noch nicht in der Lage war. Wann immer ich es finde, wird es aktualisiert.