Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bloquer temporairement l'accès à une base de données

7 réponses
Avatar
Karine
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de bases
de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès à
une base de données à tous les utilisateurs sauf au login SA bien entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide

7 réponses

Avatar
Romelard Fabrice [MVP]
Bonjour,
Il faut passer la base en mode Single User.
Dans enterprise manager > Propriétés sur la base > Onglet Option


--
Cordialement.

Romelard Fabrice [MVP]

"Karine" a écrit dans le message de news:
e2F$
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de
bases de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès à
une base de données à tous les utilisateurs sauf au login SA bien entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide



Avatar
Philippe T [MS]
Bonjour,

Ou encore :

EXEC sp_dboption 'my_database_name', 'single user', 'TRUE'

Phil.
________________________________________________________
Philippe TROTIN
Microsoft Services France http://www.microsoft.com/france
"Romelard Fabrice [MVP]" wrote in message
news:
Bonjour,
Il faut passer la base en mode Single User.
Dans enterprise manager > Propriétés sur la base > Onglet Option


--
Cordialement.

Romelard Fabrice [MVP]

"Karine" a écrit dans le message de news:
e2F$
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de
bases de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès
à une base de données à tous les utilisateurs sauf au login SA bien
entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide







Avatar
SQLpro [MVP]
Karine a écrit :
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de bases
de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès à
une base de données à tous les utilisateurs sauf au login SA bien entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide





ALTER DATABASE <maBase>
SET SINGLE USER WITH ROLLBACK IMMEDIATE

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Christophe
Tiens Karine,
je suis preneur de ta procedure qui deconnecte les utilisateurs actuel
d'une base !
@+



"Karine" a écrit dans le message de
news:e2F$
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de


bases
de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès à
une base de données à tous les utilisateurs sauf au login SA bien entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide




Avatar
Karine
La procédure spKillDbUser se sert de la fonction fnUserDbList que voici :

CREATE PROCEDURE [dbo].[spKillDbUser](@DatabaseName AS Varchar(128))
AS

SET NOCOUNT ON

DECLARE @spid AS Int
DECLARE @str AS Nvarchar(128)
DECLARE @Nbre AS Int

SET @Nbre = 0
IF DB_ID(@DatabaseName) IS NULL
RAISERROR('La base de données ''%s'' n''a pas été
trouvé',16,1,@DatabaseName)
ELSE
BEGIN
-- Liste des spid de la bd
DECLARE spidcurs CURSOR FOR
SELECT spid
FROM fnUserDbList(@DatabaseName)

OPEN spidcurs FETCH NEXT FROM spidcurs into @spid
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @str = N'Kill ' + CONVERT(nvarchar(30),@spid)
SET @Nbre = @Nbre + 1
EXEC(@str)
FETCH NEXT FROM spidcurs INTO @spid
END
DEALLOCATE spidcurs
END

-- Retourne nbre de spid déconnectés
RETURN (@Nbre)

------------------------------------------------------------------------------------

CREATE FUNCTION [dbo].[fnUserDbList](@DatabaseName AS Varchar(128))
RETURNS TABLE
AS
RETURN
(
SELECT spid, uid, login_time, last_batch, open_tran,
hostname, program_name, nt_domain, nt_username, loginame
FROM master..sysprocesses
WHERE dbid = DB_ID(@DatabaseName)
)

"Christophe" wrote in message
news:
Tiens Karine,
je suis preneur de ta procedure qui deconnecte les utilisateurs actuel
d'une base !
@+



"Karine" a écrit dans le message de
news:e2F$
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de


bases
de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès
à
une base de données à tous les utilisateurs sauf au login SA bien
entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide








Avatar
Karine
Merci
:-)

"Karine" wrote in message
news:e2F$
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de
bases de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès à
une base de données à tous les utilisateurs sauf au login SA bien entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide



Avatar
SQLpro [MVP]
ATTENTION :

Elle supprime un à un les process à un instant t, celui du lancement de
la proc. Elle n'empêche nullement que d'autres se connectent entre
temps. Elle a été faite pour débloquer des process bloqués et non pour
passer une base de données en mode mono utilisateur.

Pour ce faire et encore une fois il n'y a qu'une seule commande possible :
ALTER DATABASE ... SET SINGLE_USER ...

A +

Karine a écrit :
La procédure spKillDbUser se sert de la fonction fnUserDbList que voici :

CREATE PROCEDURE [dbo].[spKillDbUser](@DatabaseName AS Varchar(128))
AS

SET NOCOUNT ON

DECLARE @spid AS Int
DECLARE @str AS Nvarchar(128)
DECLARE @Nbre AS Int

SET @Nbre = 0
IF DB_ID(@DatabaseName) IS NULL
RAISERROR('La base de données ''%s'' n''a pas été
trouvé',16,1,@DatabaseName)
ELSE
BEGIN
-- Liste des spid de la bd
DECLARE spidcurs CURSOR FOR
SELECT spid
FROM fnUserDbList(@DatabaseName)

OPEN spidcurs FETCH NEXT FROM spidcurs into @spid
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @str = N'Kill ' + CONVERT(nvarchar(30),@spid)
SET @Nbre = @Nbre + 1
EXEC(@str)
FETCH NEXT FROM spidcurs INTO @spid
END
DEALLOCATE spidcurs
END

-- Retourne nbre de spid déconnectés
RETURN (@Nbre)

------------------------------------------------------------------------------------

CREATE FUNCTION [dbo].[fnUserDbList](@DatabaseName AS Varchar(128))
RETURNS TABLE
AS
RETURN
(
SELECT spid, uid, login_time, last_batch, open_tran,
hostname, program_name, nt_domain, nt_username, loginame
FROM master..sysprocesses
WHERE dbid = DB_ID(@DatabaseName)
)

"Christophe" wrote in message
news:
Tiens Karine,
je suis preneur de ta procedure qui deconnecte les utilisateurs actuel
d'une base !
@+



"Karine" a écrit dans le message de
news:e2F$
Bonjour,

Je suis entrain d'écrire des scripts de maintenance et d'archivage de


bases
de données.
J'aimerais savoir s'il existe un moyen de bloquer temporairement l'accès
à
une base de données à tous les utilisateurs sauf au login SA bien
entendu?
J'ai trouvé une stored procedure qui permet de déconnecter tous les
utilisateurs, mais ils peuvent toujours se reconnecter par la suite...

Merci à l'avance de votre aide













--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************