it-swarm.com.de

Wie blockiere ich den Benutzerzugriff, um eine Aktualisierung der Datenbankanwendung durchzuführen?

Wo ich arbeite, haben wir eine SQL Server-Datenbank (Microsoft SQL Server 2008 R2), die als Back-End mit zwei verschiedenen Benutzeroberflächen dient, einer .NET-Weboberfläche und einer FoxPro-Schnittstelle.

Jeden Monat müssen wir Updates sowohl auf den Web- als auch auf den FoxPro-Client anwenden. Bevor Sie dies tun, sollten Sie sicherstellen, dass während des Aktualisierungsvorgangs niemand auf die Datenbank zugreift.

Was ist der einfachste Weg, um den Zugriff auf die Datenbank zu verhindern, während wir sie aktualisieren? Folgefrage: Wie kann am besten der Zugriff verhindert werden, während wir ihn aktualisieren?

7
Baodad

Es gibt verschiedene Möglichkeiten, den Zugriff auf eine Datenbank einzuschränken:

  1. Verwenden des LOGON-Triggers - jedoch nur vorübergehend (vor dem Upgrade aktivieren und dann deaktivieren). Weitere Informationen einschließlich eines Skripts finden Sie in meiner Antwort hier .
  2. Sie können IIS auf den Webservern ) herunterfahren, damit mit der Anwendung keine Verbindungen hergestellt werden. Dies wird als "Ausfallzeit der Anwendung" bezeichnet ""
  3. Halten Sie die Datenbank im Einzelbenutzermodus mit (Beachten Sie, dass dies riskant ist, da eine andere Verbindung zur Datenbank besteht und Sie möglicherweise warten oder die Verbindung verweigern.)

    alter database databasename
    set single_user with rollback immediately
    

Sie sind besser dran, Option 2 als sicheres und geplantes Upgrade während Ihres Wartungsfensters zu verwenden.

BEARBEITEN:

Eingeschränkter Benutzer - Nur Benutzer mit dbo-Rechten für die Datenbank sind zulässig (z. B. db_owner, dbcreator, sysadmin). Dies bedeutet, dass mehrere Benutzer weiterhin in der Datenbank angemeldet sein können, solange sie DBO sind.

Einzelbenutzer - nur eine Verbindung zulässig, d. H. Wer zuerst kommt, mahlt zuerst.

Aufgrund der Tatsache, dass Einzelbenutzer zuerst kommen, zuerst bedient werden, ist dies im Falle eines Fehlers oder einer Beendigung Ihrer Verbindungen riskanter.

Wenn Sie sich mit dem Anmeldetrigger befassen, funktioniert dies, wie @AaronBertrand hervorhob, nicht für vorhandene Sitzungen. Sie können dies jedoch überwinden, indem Sie zuerst alle Sitzungen beenden und dann den Trigger aktivieren, sodass alle neuen eingehenden Verbindungen über den auslösen.

Ich kann mir keine andere Möglichkeit vorstellen, die Verbindungen zur Datenbank einzuschränken.

9
Kin Shah

Wenn Sie die Datenbank in den eingeschränkten Benutzermodus versetzen, werden nur Mitglieder der festen Serverrollen sysadmin oder dbcreator oder Mitglieder der festen Datenbankrolle db_owner kann auf die Datenbank zugreifen:

ALTER DATABASE my_app_db SET RESTRICTED_USER

Wenn Sie das Schließen bestehender Verbindungen erzwingen möchten:

ALTER DATABASE my_app_db SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

Und wenn Sie bereit sind, die Dinge wieder normal zu machen:

ALTER DATABASE my_app_db SET MULTI_USER

Quelle: http://www.blackwasp.co.uk/SQLRestrictedUser.aspx

In diesen Fällen wird der Einzelbenutzermodus nicht empfohlen, da beim Aktualisieren der Anwendung möglicherweise mehrere Verbindungen gleichzeitig geöffnet werden müssen.

9
db2

Wenn Sie eine festgelegte Gruppe von Benutzern haben, die auf die Datenbank zugreifen, oder nur ein oder zwei Anwendungskonten, die die Datenbankverbindung herstellen, können Sie einfach die Anmeldungen deaktivieren und alle Verbindungen beenden und dann die Anmeldungen erneut aktivieren. wenn du fertig bist.

3
Cougar9000

Ich bin mir nicht sicher, ob ich verstehe, ob sich Ihr SQL Server auf demselben Computer befindet wie Apps, die darauf zugreifen.

Wenn nicht, können Sie den Firewall-Port für SQL Server einfach für den gesamten eingehenden Datenverkehr deaktivieren, und Sie sind alle in Ordnung. Eine weitere Option besteht darin, die IP-Adresse im SQL Server-Konfigurationsmanager zu deaktivieren, der für den Zugriff auf den Server verwendet wird (und nur die lokale IP 127.0.0.1 zu belassen).

1
Stanley Norman