데이터베이스/MS SQL

MS-SQL 2005/2008을 위한 SHA256.512 함수 추가

 

http://www.innoya.com/Tools/fnEnCryptSHA.aspx

 

정보시스템 보안 기준을 충족하기 위해서는 보안강도 112비트 이상을 지원하는 SHA-224/256/384/512 알고리즘을 사용해야 한다.(안정성 유지기간 2030년까지) MS-SQL에서 지원하는 HASHBYTES 함수는 2012버전부터 SHA-256/512를 지원하며 2008 R2 이하 버전은 SHA-1까지만 지원한다.(보안강도 112비트 안정성 유지기간 2010년 종료)

 

알고리즘을 찾아서 함수를 만느는 방법과 프로그래밍 언어로 DLL을 생성하여 추가하는 방법을 고려하였으나 다행히 인터넷을 통해 DLL로 구현된 함수를 활용할 수 있었다. 생각보다 많은 사용자를 확보하고 있는 모양이다.

참고 : http://msdn.microsoft.com/ko-kr/library/ms345408(v=sql.105).aspx#MoveMaster


Windows 7 상에 MS SQL Server 2008 R2 EXPRESS를 설치해서 공부하는 중 한가지 문제가 발견되었다. 시스템 폴더가 설치되어 있는 C 드라이브가 SSD(256GB)이고 D 드라이브에 HDD(1TB)를 부착해 두었는데 설치할 때 깜박 잊고 데이터베이스의 설치 경로를 바꾸지 않은 것이다. 다시 설치할까 생각을 했지만 비주얼스튜디오와 MS SQL의 서비스팩 등이 설치되어 있는지라 다시 설치하는 건 번거로울 것 같아서 데이터베이스 파일의 경로를 변경하기로 했다.


일단 MSDN을 검색했더니 사용자데이터베이스와 시스템데이터베이스의 경로를 이동하는 방법을 알 수 있었다. MS SQL Server 2005, 2008, 2008 R2, 2012 버전에 적용 가능하다.


1. 일단 데이터베이스의 논리적 이름을 확인한다.

USE master

GO

SELECT name FROM sys.master_file;

GO


2. 계획된 재배치 및 예약된 디스크 유지 관리 절차에 따라 사용자데이터베이스와 master를 제외한 시스템데이터베이스의 변경 정보를 적용시킨다.

USE master

GO

ALTER DATABASE 데이터베이스명 MODIFY FILE ( NAME = 논리이름 , FILENAME = '변경할 파일의 경로명' );

GO


예) tempdb 경로 변경

USE master

GO

ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev , FILENAME = 'D:\SQLData\tempdb.mdf' );

GO

ALTER DATABASE tempdb MODIFY FILE ( NAME = templog , FILENAME = 'D:\SQLData\templog.ldf' );

GO


쿼리 실행 후 서비스를 중지시키고 해당 파일을 새 위치로 이동한 뒤에 서비스를 시작한다.


3. 마지막으로 master 데이터베이스의 경로를 변경한다.

1) 시작 - 모든 프로그램 - Microsoft SQL Server 2008 R2 - 구성 도구 - SQL 구성 관리자 를 클릭한다.

2) 「SQL Server 서비스」노드에서 SQL Server 인스턴스를 선택하여 속성 창을 띄운다.

3) SQL Server 속성 대화상자에서 고급 탭을 선택한다.

4) 시작 매개 변수의 값을 변경한다. -d 는 data 파일의 경로이며, -e 는 에러로그, -l 은 log 파일의 경로이다.

5) 인스턴스를 중지시킨 후 master.mdf 파일과 mastlog.ldf 파일을 새 위치로 이동한다.
6) SQL Server 인스턴스를 다시 시작한다.

※ 주의할 점은 해당 데이터베이스 파일에 SQL Server 인스턴스가 액세스 하기위해 SQL Server 사용자가 접근할 수 있도록 해당 폴더에 권한을 부여해야 한다는 점이다. 오류 발생시는 에러로그를 확인하거나 이벤트 뷰어를 통해 응용프로그램 로그를 확인한다.

마지막으로 다음 쿼리를 실행시켜서 변경 내용을 확인한다.

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_file
WHERE database_id = DB_ID( N'데이터베이스명' );
GO


+ Recent posts