2009-04-07 3 views
0

In SQL Server können Sie Anwendungsrolle Sicherheit, durch die Sie zum Beispiel bestimmte Berechtigungen geben können, die von bestimmten Anwendungen stammen.Beschränken Sie LINQ2SQL DataContext zu bestimmten SQL Application Role

Sie können sp_SetAppRole() ausführen, um die Anwendungsrolle festzulegen, aber Sie haben sich gefragt, wie dies erreicht werden könnte, wenn Sie einen LINQ2SQL-Datenkontext mit der geringsten Reibung verwenden.

ich diesen Link gesehen habe: http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/e25e98a6-b0ac-42fc-b70c-2b269a7fa1cb aber hatte gehofft, für eine sauberere Ansatz/

Antwort

1

Meine Schlußbemerkungen (siehe unten Abschnitt für die, warum):

Mit Rollen SQL-Anwendung nicht gut spielt mit Verbindungspooling und sollte auch nicht direkt in endgültigen Benutzer-Apps (nur auf einer Business-Tier) verwendet werden.

Die SQL-Alternative würde eine Menge Vorteile von der Verwendung von linq wegnehmen, da sie auf SPs angewiesen ist.

Meine Empfehlung:

Wenn Sie ein Business-Tier/Server haben, tun Berechtigung auf Anwendungsebene, anstatt sich auf SQL-Autorisierung. Wenn Sie weiterhin autorisieren möchten, müssen Sie der Anwendung der Geschäftsschicht ein Konto zuordnen und eine normale Rolle zuordnen.

Wenn es eine Client-App ist, die direkt mit SQL verbindet. Der Benutzer hat immer noch die Erlaubnis, anzurufen, auf was auch immer seine Identität Zugriff hat, und das App-Passwort ist dort. Wenn Sie mit dem Zugriff dieses Benutzers nicht vertraut sind, benötigen Sie eine Geschäftsschicht.

Wenn Sie mit dem Ansatz fortfahren möchten, deaktivieren Sie das Verbindungspooling. Um den Open/Close-Overhead zu reduzieren, öffnen Sie die Verbindungen explizit.


Vollständige Erklärung/Referenzen:

Ein Problem ist es nicht gut mit Verbindungspooling nicht spielt. Das ist unabhängig von linq2sql. Siehe am Ende von this in msdn.

Es gibt 2 Alternativen seit SQL-Server 2005 (msdn link), eine wird auch in dem Thread erwähnt, mit dem Sie verbunden sind, aber es weist auch darauf hin, dass es schief gehen kann.

Beachten Sie, dass es eine ungesicherte Option in einem 2-Tier-Szenario ist, wenn die von den Clients verwendete Anwendung direkt mit SQL verbindet. In diesen Fällen würde der pwd für jede Anwendung auf dem Computer des Clients offengelegt werden. Es ist sicherer, wenn es eine Geschäftsschicht ist, die verbindet, aber genau das ist der Fall, wenn Sie wirklich Verbindungspooling wollen.

Die andere Alternative, die in meinem zweiten Link zu msdn erwähnt wird, funktioniert gut mit Verbindungspooling. Es basiert auf gespeicherten Prozeduren und der Anweisung execute as. Das Ausführen, wie es in der Prozedur aufgerufen wird, und nach der Ausführung der Prozedur wird der Kontext zurückgesetzt. Das ist großartig, aber würde wirklich viel von dem geben, was Sie mit linq2sql bekommen, indem Sie die SP-Route gehen.

Verwandte Themen