删除SQL SERVER中其他用户创建的所有登录

时间:2016-10-08 01:45:58

标签: sql-server sql-server-2008 sql-server-2008-r2

我希望能够在sql server中删除所有登录,这不是我自己创建的。   我已经使用了以下代码并且它已成功执行但登录仍然存在并且没有任何更改。真的很困惑,需要帮助。   我的代码是

DECLARE @LoginName sysname
DECLARE @SQL NVARCHAR(1000)

DECLARE DBLOGINS CURSOR FOR
    SELECT name FROM sys.database_principals
    WHERE name <> N'schooladmin' and name <> N'school1' and name <> N'school2' and type_desc = 'SQL_LOGIN'
and sid <> 0x01 and substring(name, 1, 1) <> '#'

OPEN DBLOGINS

FETCH NEXT FROM DBLOGINS INTO @LoginName
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'DROP LOGIN [' + @LoginName + ']'
    EXEC sp_executesql @SQL
    FETCH NEXT FROM DBLOGINS INTO @LoginName
END

CLOSE DBLOGINS
DEALLOCATE DBLOGINS

请帮忙。

2 个答案:

答案 0 :(得分:1)

请检查以下修改后的代码,可能您正在寻找类似的内容。

Declare @sql varchar(max)=''

SELECT @sql +='Drop Login [' + name + '];' +char(13)+char(10) 
FROM sys.database_principals
WHERE type_desc = 'SQL_Login' -- Double check this value, I found it SQL_User
  and sid <> 0x01 
  and Left(name, 1) <> '#'
  and name NOT IN( N'schooladmin', N'school1', N'school2')

print @sql
--  Exec(@sql)

答案 1 :(得分:0)

您的命令执行成功而没有使用任何登录,因为光标中的查询始终没有检索任何行!

使用OR代替AND进入where子句

如下:

  WHERE (name <> N'lisabi' OR name <> N'school1' OR name <> N'school2' ) and type_desc = 'SQL_LOGIN'