- Copy the code into a new query window.
- Edit the SET @UserLogin variable as required for the server login.
- Execute the script.
Simple
Simple
DECLARE @Cursor CURSOR
DECLARE @DatabaseName VARCHAR(100)
DECLARE @UserLogin VARCHAR(100)
DECLARE @Message VARCHAR(100)
--Enter user server login:
SET @UserLogin = 'domain\username'
--Temp table for information purposes only
IF EXISTS (SELECT * FROM tempdb.dbo.sysobjects WHERE ID = OBJECT_ID(N'tempdb..##DropUserCount'))
DROP TABLE ##DropUserCount
CREATE TABLE ##DropUserCount
(
[LoginFound] INT
)
--Remove user from each database
SET @Message = 'User found in and removed from database: '
SET @Cursor = CURSOR FOR
SELECT
[name]
FROM
sys.databases
WHERE
[state] <> 6 --6 = Offline
ORDER BY
[name]
OPEN @Cursor
FETCH NEXT FROM @Cursor INTO
@DatabaseName
WHILE (@@FETCH_STATUS = 0)
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL =
'
USE [' + @DatabaseName + ']
SET NOCOUNT ON
DECLARE @LocalUser VARCHAR(200)
IF(
SELECT
COUNT(0)
FROM
sys.server_principals serv
JOIN sys.database_principals dbs
ON serv.[sid] = dbs.[sid]
WHERE
serv.[name] = ''' + @UserLogin + '''
) > 0
BEGIN
SELECT
@LocalUser = dbs.[name]
FROM
sys.server_principals serv
JOIN sys.database_principals dbs
ON serv.[sid] = dbs.[sid]
WHERE
serv.[name] = ''' + @UserLogin + '''
INSERT INTO ##DropUserCount ([LoginFound]) VALUES (''1'')
EXEC sp_dropuser @LocalUser
PRINT ''' + @Message + @DatabaseName + '.''
END
'
--PRINT @SQL
EXEC (@SQL)
FETCH NEXT FROM @Cursor INTO
@DatabaseName
END
CLOSE @Cursor
DEALLOCATE @Cursor
IF(SELECT SUM([LoginFound]) FROM ##DropUserCount) IS NULL
PRINT 'User database logins not found.'
--Remove login from server
IF (SELECT COUNT(0) FROM sys.syslogins WHERE [name] = @UserLogin) > 0
BEGIN
SET @SQL = 'DROP LOGIN [' + @UserLogin + ']'
EXEC (@SQL)
PRINT 'User login dropped from server.'
END
ELSE
BEGIN
PRINT 'User login to server not found.'
END