2016-10-08 2 views
0

내가 직접 만든 로그인이 아닌 SQL Server에서 모든 로그인을 삭제할 수 있기를 원합니다. 다음 코드를 사용했지만 성공적으로 실행되었지만 로그인은 유지되고 아무 것도 변경되지 않았습니다. 정말 혼란스럽고 도움이 필요합니다. 내 코드는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 

도와주세요.

+1

필요한 로그인 정보를 얻으려면 SELECT 문을 확인하십시오. – p2k

답변

1

아마 이런 식으로 뭔가를 찾고 있습니다, 아래의 수정 된 코드를 확인하십시오 : 절에 다음과 같이

어디에

사용 OR 대신 AND.

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) 
+0

고맙습니다. 너무 많이 안심했습니다. – DoreenSly

0

커서의 쿼리가 항상 행을 검색하지 않으므로 명령을 실행하지 않고 명령이 성공적으로 실행됩니다!

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