Ich beabsichtige, MS SQL Server 2005-Anwendungsrollen in meiner Anwendung zu verwenden. Ich werde die Rolle starten, indem ich die sp_setapprole
ausführe und die sp_unsetapprole
SPs ausführe. Die Anwendung ist in ASP.NET implementiert.
Ich habe gelesen, dass "Verbindungspooling funktioniert nicht" mit Application-Pooling und es gibt keine Möglichkeit, auf Verbindung zu reagieren "Ereignis trennen" (execute sp_unsetapprole
kurz vor der Trennung).
Ich möchte sp_setapprole
zu Beginn aller meiner SPs aufrufen und sp_unsetapprole
am Ende aller meiner SPs aufrufen.
Haben Sie SQL-Anwendungsrollen verwendet? Was sind deine XPs? Was ist mit Performance-Hit?
Ich habe in der Vergangenheit meinen eigenen "Appel" gerollt, es ist nicht zu schwer. Erstellen Sie eine Datenbankrolle für jeden Benutzertyp (Manager, Casher, Clerk, was auch immer). Erstellen Sie einen Datenbankbenutzer mit dem Gruppennamen (manager_user, casher_user, clerk_user usw.). Erstellen Sie Konten für Ihre echten Benutzer und ordnen Sie sie den Datenbankrollen zu. Validieren Sie Ihre asp.net-Benutzer, indem Sie sie in der Datenbank anmelden (eine Verbindung öffnen und beenden), eine Nachschlagetabelle oder am besten , wenn Sie die Windows-Authentifizierung verwenden und nur ihren Benutzernamen von IIS erhalten. Überprüfen Sie ihre Mitgliedschaft in einer Datenbankrolle, melden Sie sich jedoch mit role_user in der Datenbank an. Sie können die Datenbankobjekte über den Benutzer role_user sichern, die Benutzer loggen sich nicht ein und haben keinen Zugriff auf SQL-Objekte und Sie erhalten Verbindungspooling.
Ich habe noch nie zuvor App-Rollen verwendet, aber nach dem, was ich über den Perf-Treffer weiß, gibt es nach dem Festlegen der Anwendungsrolle keine Möglichkeit, zum vorherigen Punkt zurückzukehren. Sicherheitskontext. Daher kann die Verbindung nicht im Pooling wiederverwendet werden. Dies allein ist eine große Leistung. Hit, der Sie dazu zwingt, über die Verwendung von App-Rollen nachzudenken.
Die Dokumente geben jedoch an, dass ab SQL Server 2005 eine Möglichkeit besteht, den ursprünglichen Sicherheitskontext in einer Art von Cookie zu speichern, die von sp_setapprole zurückgegeben wird, und danach sp_unsetapprole zu verwenden, um zu diesem zurückzukehren. Also sollte das Pooling wieder funktionieren. Wenn ich du wäre, würde ich die Perf vergleichen. mit ein paar einfachen Anweisungen / Sprocs.
Gibt es einen Grund, warum Sie nicht die standardmäßige ASP.NET-Mitgliedschafts-API auf Anwendungsebene anstelle von App-Rollen verwenden?
Tags und Links sql-server asp.net performance sql-server-2005