mssql 운영시 의도치 않게 데이터가 삭제되는 경우, 추적을 위한 방안

'TestDB' DB의 'tblTest'테이블 데이터 삭제 시, BAK_tblTest_Delete 테이블에 삭제 데이터 및 세션 정보 저장

USE [TestDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[delete_info_insert]
ON [dbo].[tblTest]
FOR UPDATE, DELETE AS

	DECLARE   @login_name	nvarchar(128)
		, @program_name	nvarchar(128)
		, @host_name	nvarchar(128)

			
	SELECT    @login_name = ISNULL(original_login_name, ORIGINAL_LOGIN())
		, @program_name = T1.program_name
		, @host_name = T1.host_name
	FROM sys.dm_exec_sessions T1
	WHERE T1.session_id = @@spid

	INSERT INTO BAK_tblTest_Delete ([Seq], [ID], [TestParam], [CreateDatetime], [loginname], [program_name], [hostname])
	SELECT
		[Seq], [ID], [TestParam], [CreateDatetime], @login_name, @program_name, @host_name
	FROM deleted;

 

"데이터베이스 보안 주체는 데이터베이스의 스키마을(를) 소유하며 삭제할 수 없습니다."라는 에러는 MSSQL에서 사용자를 삭제하려고 할때 이 사용자가 스키마를 소유하고 있다면 삭제할 수 없다는 에러 메시지가 나온다.

위 그림처럼 SSMS에서 마우스 클릭을 통해  사용자를 삭제하려고 할때 경고 안내창이 나온다.

 

아래와 같이 Drop User isoltek; 라는 SQL을 실행하여 삭제하려고 하면 결과 메시지에 삭제할 수 없다는 내용이 나온다.

 

위 에러는 삭제할 사용자가 소유한 스키마를 dbo 로 이관 시키고 삭제하면 해결된다.

 

사용자가 소유한 스키마를 dbo로 이관 시키는 방법은 두가지가 있다.

가. 마우스 클릭을 통해 이관하는 방법

나. SQL 창에서 SQL을 실행하여 이관하는 방법

 

이해할 있도록 이 과정을 모두 캡쳐해서 붙인다.

(아래 붙인 그림들은 클릭하면 모두 원본으로 볼 수 있다. 만약 글씨가 작아 크게 보고자 할경우 그림을 클릭하면 된다.)

 

여기까지가 마우스를 사용한 과정이다.

 

이것을 SQL 창에서 실행하면 아래와 같은 명령어를 사용하면 위 그림과 같은 결과를 갖는다.

 

Select * From [sys].[schemas] 
Where [principal_id]=USER_ID('isoltek');


Alter Authorization On Schema::isoltek To dbo;

 

이렇게 두줄이면 되는 것을 마우스로 하려면 10개 정도의 과정을 수행해야 한다.

사람마다 어떤 것이 편할지는 모른다. 각자 취향이 있으므로 자신에게 편한 방법으로 수행하면 된다.

 

이렇게 하고난 후 삭제를 하면 "데이터베이스 보안 주체는 데이터베이스의 스키마을(를) 소유하며 삭제할 수 없습니다."라는 에러 없이 삭제할 수 있다.

 

참고 : https://m.blog.naver.com/reinstate10/220588912597

Perl 설치중 Perl MakeFile.PL명령을 실행하니 아래와 같은 오류가 발생했다.

 

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 
/usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl 
/usr/lib64/perl5 /usr/share/perl5 .) at [Makefile.PL](http://makefile.pl/) line 7.

해결방법

  • 해결방법은 간단하다. CPAN을 설치해주자.
 yum install perl-CPAN

참고 : https://jinseongsoft.tistory.com/221 [진성 소프트]


to Top