Là où je travaille, nous avons une base de données SQL Server (Microsoft SQL Server 2008 R2) qui sert de back-end avec deux interfaces utilisateur différentes, une interface Web .NET et une interface FoxPro.
Chaque mois, nous devons appliquer des mises à jour aux clients Web et FoxPro. Avant de faire cela, nous vous conseillons de vous assurer que personne n'accède à la base de données pendant le processus de mise à jour.
Quelle est la façon la plus simple d'empêcher l'accès à la base de données pendant que nous la mettons à jour? Question de suivi: Quel est le meilleur moyen d'empêcher l'accès pendant que nous le mettons à jour?
Vous pouvez restreindre l'accès à une base de données de deux manières:
Gardez la base de données en mode mono-utilisateur en utilisant (Notez que cela sera risqué comme s'il y avait une autre connexion à la base de données, alors vous pourriez finir par attendre ou refuser la connexion.)
alter database databasename
set single_user with rollback immediately
Vous feriez mieux d'utiliser l'option 2 comme une mise à niveau sûre et planifiée pendant votre fenêtre de maintenance.
MODIFIER:
Utilisateur restreint - seuls les utilisateurs avec des droits dbo sur la base de données sont autorisés (par exemple db_owner, dbcreator, sysadmin). Cela signifie que plusieurs utilisateurs peuvent toujours être connectés à la base de données, tant qu'ils sont DBO.
Utilisateur unique - une seule connexion autorisée, c'est-à-dire premier arrivé, premier servi.
En raison du fait que l'utilisateur unique sera le premier arrivé, premier servi - il sera plus risqué en cas d'erreur ou que vos connexions soient interrompues.
Lorsque vous traitez avec Logon Trigger, comme l'a souligné @AaronBertrand, cela ne fonctionnera pas pour les sessions existantes, mais vous pouvez surmonter cela en supprimant d'abord toutes les sessions, puis en activant le déclencheur de sorte que toutes les nouvelles connexions entrantes doivent passer par le déclencheur.
Je ne peux penser à aucun autre moyen de restreindre les connexions à la base de données.
Si vous mettez la base de données en mode utilisateur restreint, seuls les membres des rôles de serveur fixes sysadmin
ou dbcreator
, ou les membres du rôle de base de données fixe db_owner
peut accéder à la base de données:
ALTER DATABASE my_app_db SET RESTRICTED_USER
Si vous souhaitez forcer la fermeture des connexions existantes:
ALTER DATABASE my_app_db SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
Et quand vous êtes prêt à remettre les choses à la normale:
ALTER DATABASE my_app_db SET MULTI_USER
Source: http://www.blackwasp.co.uk/SQLRestrictedUser.aspx
Je ne recommande pas le mode mono-utilisateur dans ces cas, car le processus de mise à jour de l'application peut avoir besoin d'ouvrir plusieurs connexions simultanément.
Si vous avez un groupe défini d'utilisateurs qui accéderaient à la base de données ou seulement un ou deux comptes d'application qui établissent la connexion à la base de données, vous pouvez simplement désactiver la ou les connexion (s) et tuer toutes les connexions, puis réactiver la ou les connexion (s) quand tu as fini.
Je ne suis pas sûr de comprendre si votre serveur SQL est sur la même machine que les applications qui y accèdent.
Sinon, vous pouvez simplement désactiver le port du pare-feu pour SQL Server pour tout le trafic entrant et tout va bien. Une autre option consiste à désactiver l'adresse IP dans le gestionnaire de configuration SQL Server qui est utilisé pour accéder au serveur (et ne laisser que l'IP 127.0.0.1 locale)