Existe-t-il un moyen de désactiver plusieurs connexions SQL en fonction d'un ensemble d'utilisateurs dans une table? Par exemple:
ALTER LOGIN (Select userid from tbl_user) DISABLE;
Non, vous ne pouvez pas nourrir une requête à un ALTER LOGIN
commande. Mais vous pouvez construire la commande assez facilement à l'aide de SQL dynamique:
DECLARE @sql nvarchar(max) = N'',
@cmd nvarchar(550) = N'ALTER LOGIN $$$ DISABLE;'
+ CHAR(13) + CHAR(10);
SELECT @sql += REPLACE(@cmd, N'$$$', QUOTENAME(userid))
FROM dbo.tbl_user;
PRINT @sql;
-- EXEC sys.sp_executesql @sql;
Lorsque vous êtes satisfait de la sortie, déconnectez le EXEC
.
Notez que si vous avez beaucoup des utilisateurs de cette table, vous ne pourrez pas voir la commande entière à l'aide de PRINT
, car il y a des limitations de la longueur de sortie. Voir cette pointe pour la solution de contournement.
En outre, il n'y a pas de manipulation d'erreur ici, vous devriez probablement réellement ajouter TRY
/CATCH
ou rejoindre à sys.server_principals
Pour vous assurer que vous désactivez les connexions qui existent réellement:
SELECT @sql += REPLACE(@cmd, N'$$$', QUOTENAME(p.name))
FROM dbo.tbl_user AS u
INNER JOIN master.sys.server_principals AS p
ON p.name = u.userid;