2010-07-29 1 views
1

SQL Server 2008을 통해 관리되는 코드를 실행하는 것과 관련된 성능 문제를 알고 싶습니다. 일부 메모리 및 속도 문제에 대해 들었습니다.SQL Server 2008에서 관리 코드 실행 - 문제가 있습니까?

은 특히, 내가 DLL을 해싱 SHA256을 구현하고 나는 단순히 내 닷넷 응용 프로그램에서 해시를 실행할 수 있습니다, 2008 년

다른 방법으로 SQL 서버와의 sproc로 실행하려면, 다음 내 sprocs가에 문자열을 전달 .

장/단점?

감사합니다.

+1

새로운 공간 기능은 CLR을 사용하여 구현되었습니다. 따라서 MS는 CLR에서 성능이 뛰어날 필요가있는 주요 새 기능을 구현하는 데 충분한 자신감을 보였습니다. – AaronLS

+0

기본 제공 암호화 방법 중 적합한 것이 있습니까? –

+0

Will, SHA256 이상의 암호화를 구현해야합니다. 알고있는 한 SQL Server 2008의 축소 포장 버전에서는 사용할 수 없습니다. – ElHaix

답변

2

SQLCLR은 매우 빠릅니다. T-SQL 내에서 CLR 코드를 실행할 필요가있을 때 사용하십시오. 예를 들어, 서명과 SQLCLR 기능 쓰기 말 :

SqlString Hash(SqlString input) 

그리고 당신은해야 방법을 실행하는 모든 것을 얻을 관리 할 수 ​​있습니다. 앱에서 가상의 암호 필드를 해시 관리 할 경우, 앱 내에서 그렇게 할 것이 더 낫다

IF EXISTS(SELECT * FROM Users WHERE HashedPassword = dbo.Hash(@userPassword) AND UserName = @userName) 
BEGIN 
    SELECT 'You''re alright, Jack.'; 
END 
ELSE 
BEGIN 
    SELECT 'Bogus.'; 
END 

하고 쿼리를 실행하는 SQL Server에 해시 값을 전달 다음과 같은 쿼리를 실행할 수 있습니다 같은 :

SELECT * 
FROM User 
WHERE UserName = @userName AND HashedPassword = @hashedPassword 

이것은 몇 가지 이유에 대한 더 나은 :

  1. 당신은 그것을 테스트하기 어려울 것입니다 SQL 서버로 비즈니스 로직을 넣어되지 않습니다.
  2. 쿼리 자체가 훨씬 덜 복잡하므로 SQL Server의 작업량이 줄어들어 더 빠릅니다.
  3. SQLCLR을 위로 설정하면 문제가 발생할 수 있습니다 (SQLCLR은 기본적으로 해제되어 있습니다). 프로덕션 서버에 직접 액세스 할 수없는 경우 특히 SQL Server에 어셈블리를 배포하는 것이 어려울 수 있습니다.
  4. SQLCLR을 사용하지 않는 경우 앱을 업데이트/배포 할 때 SQL Server에서 CLR 항목을 업데이트/배포하지 않아도됩니다. 이렇게하면 유지 관리 노력이 줄어 듭니다.