删除 Windows 登录后,数据库用户未报告为孤立用户

K09*_*K09 3 sql-server users logins

我删除了 SQL Server Windows登录。然后我运行下面的代码来检查孤立的数据库用户。但是,与删除的 Windows 登录对应的数据库用户不会显示为孤立用户。

为什么会这样?

EXEC sp_change_users_login @Action = 'Report';
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 6

Thomas 解释了为什么该存储过程没有捕获孤立的 Windows 用户,但您可以通过以下方式进行检查:

SELECT p.name 
FROM database_name.sys.database_principals AS p
WHERE [type] IN (N'U', N'G')
AND NOT EXISTS
(
  SELECT 1 FROM sys.server_principals AS sp
    WHERE sp.sid = p.sid
);
Run Code Online (Sandbox Code Playgroud)

如果您需要对所有数据库执行此操作,您可以动态生成它,例如

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'SELECT ''' + db.name + ''',p.name
  FROM ' + QUOTENAME(db.name) + '.sys.database_principals AS p
  WHERE [type] IN (N''U'', N''G'')
  AND NOT EXISTS
  (
    SELECT 1 FROM sys.server_principals AS sp
    WHERE sp.sid = p.sid
  );'
FROM sys.databases AS db
WHERE [state] = 0;

EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)