데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

삭제된 AD 그룹 계정으로 SQL Server 로그인 사례 (로그인 그룹 삭제  조치해야할 사항)

 

·       Version : SQL Server

 

도메인 [DOMAIN\group] 멤버 [DOMAIN\user] 있고 [DOMAIN\group] SQL Server 인스턴스에 대한 로그인 권한이 있는 그룹이 있다고 가정한다. “Drop Login [DOMAIN\group]” 실행하면 [DOMAIN\user] 사용자는  이상 SQL Server 액세스   없을 것으로 예상했다그러나 아래와 같은 결과가 나왔다.

·       [DOMAIN\user] 새로운 연결은 허용되지 않음

·       기존 연결된 사용자는 계속 작동함 (기존의 [DOMAIN\user] 연결에는 그룹 구성원  권한이 캐시되므로 해당 값을 새로 고칠때 까지 연결을 통해 쿼리를 계속 실행할  있다.)

 

“DROP LOGIN [DOMAIN\user]” 실행될  [DOMAIN\user] 로그인으로 추가되어있고 SQL Server  연결이 되어 있는 경우 다음과 같은 오류 메시지와 함께 명령이 실패 한다.

DROP LOGIN” command fails with error “Could not drop login 'DOMAIN\user' as the user is currently logged in.

 

 [DOMAIN\user] 연결이 해제되면  “DROP LOGIN [DOMAIN\user]” 성공하고 사용자는  이상 SQL Server 액세스할  없다.

[DOMAINO\group] 로그인으로 추가되고 “DROP LOGIN [DOMAINO\group]” 명령을 실행하면 [DOMAINO\user] 로그인  경우에도 “DROP LOGIN”명령이 성공한다그러나 [DOMAIN\ user] 여전히 로그인되어 있는지 확인하기 위해해서는 아래 스크립트를 실행하여 확인할  있다.

select login_name from sys.dm_exec_sessions where login_name = 'DOMAIN\user'

 

"DROP LOGIN <loginName>" 실행하면 SQL Server <loginName> 계정에 대한 활성 연결이 있는지 확인한다 로그인에 대해 활성화  연결이 없으면 로그인이 제거되고 명령이 성공한다그러나 <loginName> AD 그룹  경우 SQL Server 그룹의 구성원  활성 로그인이 있는지 확인하지 않는다. [DOMAIN\ group] 삭제하면 [DOMAIN\user] 로그인되어 있고 [DOMAIN\ group] 구성원  경우에도 [DOMAIN\ group] 대한 활성 연결이 없기 때문에 명령이 성공한다실제로 [DOMAIN\ user] 권한있는 작업 ( : 로그인 생성) 수행하거나 연결을 재설정 ( : sp_reset_connection 로그 아웃  다시 로그인 때까지 연결 상태를 유지한다이때 SQL Server [DOMAIN\ user] 권한을 확인하고  이상 유효한 로그인이 없는지 확인하고 연결을 끊는다이러한 연결을 강제로 재설정   있다그룹 로그인을 삭제   아래 스크립트를 실행한다.

SELECT session_id FROM sys.dm_exec_sessions WHERE login_name = 'DOMAIN\user'

 

스크립트를 실행하면 [DOMAIN\ user]  연결의 모든 세션 ID 보여준다이제 KILL <session_id>”를 실행하여 강제로 사용자 연결을 종료한다. [DOMAIN\user] 세션은 강제 종료된 상태이기 때문에 쿼리를 실행할   이상 유효한 로그인이 없는 상태여서 다시 연결을 해야한다이때 그룹이 삭제되어 있기 때문에 연결할  없게 된다.

연결 자체는 sp_reset_connection 호출하여 스레드가 로그 아웃했다가 SQL Server 다시 로그인하도록하여 권한 업데이트를 강제  수도 있다연결이 영구적이며 지속적으로 로그 아웃했다가 다시 로그인하여 권한 검사를 수행하지 않기 때문에 연결 풀링에 유용하다풀링  연결을 검색   sp_reset_connection 호출하면 로그인 권한이 취소  경우 연결이 실패된다.

 

그룹에 대한 작업 권한이 취소되면 구성원 사용자의 권한이 즉시 취소된다예를 들어 [DOMAIN\group] "foo"테이블에 대한 선택 권한이 있고 "REVOKE SELECT ON foo TO [DOMAIN\ group]" 실행  경우 [DOMAIN\user] 즉시 "foo" 대한 선택 권한을 잃게된다아래 스크립트를 사용하여  실습 가능하다.

Login as an admin user to SQL Server and add [DOMAIN\group] as a login

#

CREATE LOGIN [DOMAIN\group] FROM WINDOWS

GO

 

In another terminal, login to SQL Server as [DOMAIN\user] and run a query to show you have access

#

SELECT @@VERSION

GO

 

# Switch back to your admin terminal and drop the group login. It will succeed even though [DOMAIN\user] is connected.

#

DROP LOGIN [DOMAIN\group]

GO

 

# Switch back to your [DOMAIN\user] window and check you still have access

#

SELECT @@VERSION

GO

 

# Switch to the admin terminal and kill the connection

#

SELECT session_id FROM sys.dm_exec_sessions WHERE login_name = DOMAIN\user

GO

 

KILL <session_id from query above>

GO

 

# Switch to your [DOMAIN\user] window to see they no longer have access. This command should not return the version information.

#

SELECT @@VERSION

GO

 

 

[참고자료]

https://blogs.msdn.microsoft.com/bobsql/2018/08/03/sql-server-mysteries-the-case-of-the-dropped-ad-group-login/

 

 

2019-09-11 / Sungwook Kang / http://sungwookkang.com

 

 

 

SQL Server Login, SQL Server Account, Active Directory, AD, DROP LOGIN, CREATE LOGIN



출처: https://sqlmvp.tistory.com/1335 [Database Lab]
No. Subject Author Date Views
2190 Azure에서 제공하는 데이터베이스 서비스 종류, AWS 및 GCP와 제품 비교 코난(김대우) 2020.12.25 140
2189 SQL Server 트랜잭션 로그 복원시 복원 시간이 오래 걸리는 현상 jevida(강성욱) 2020.02.28 1276
2188 SQL Server 2019 temp table을 사용한 워크로드에서 recompile 감소 jevida(강성욱) 2019.09.24 1620
2187 Azure SQL Managed Instance 및 SQL Server 2016 Later에서 대기 통계 분석 jevida(강성욱) 2019.09.24 1205
2186 SQL Server 2019에서 동기 통계 업데이트시 발생하는 쿼리 Blocking 확인 jevida(강성욱) 2019.09.21 1182
2185 SQL Server 2019 Log Writer Workers jevida(강성욱) 2019.09.21 1380
2184 SQL Server Login Timeout 디버깅 jevida(강성욱) 2019.09.19 1750
2183 SQL Server Worker Thread 기본 계산 jevida(강성욱) 2019.09.18 1278
2182 SQL Linux의 fsync 및 버퍼된 IO (버퍼된 쓰기중 오류가 발생하였을때 파일은 유효할까?) jevida(강성욱) 2019.09.17 1189
2181 SQL Server와 SQL Linux에서 인스턴스 파일 초기화 차이점 jevida(강성욱) 2019.09.14 1205
2180 BCP 실행시 동일 세션에서 여러개의 BULK INSERT 문으로 표시되는 이유 jevida(강성욱) 2019.09.13 1294
» 삭제된 AD 그룹 계정으로 SQL Server 로그인 사례 (로그인 그룹 삭제 후 조치해야할 사항) jevida(강성욱) 2019.09.12 1092
2178 QPI(Query Performance Insights) 라이브러리를 사용하여 Azure SQL Managed Instance의 로그쓰기 사용량 확인 jevida(강성욱) 2019.09.11 980
2177 ODBC 드라이버를 사용하여 SQL Server에서 Azure CosmosDB 쿼리 실행 jevida(강성욱) 2019.09.10 1062
2176 Azure SQL Managed Instance에서 로컬 스토리지 사용량 모니터링 jevida(강성욱) 2019.09.09 1074
2175 SQL Server Enterprise Edition 에서 CPU를 40 Core 이상 사용하지 못하는 현상 jevida(강성욱) 2019.09.04 1211
2174 SQL Server Agent Job에서 sysploicy_purge_history 작업실패 jevida(강성욱) 2019.09.04 1242
2173 where절 case관련... BGT051 2019.09.03 1276
2172 SQL Server에서 테이블 이름을 변경하지 않고 테이터만 교체하기 jevida(강성욱) 2019.05.03 1840
2171 SQL Server master 데이터베이스 정리 jevida(강성욱) 2019.04.23 4647





XE Login