2012-01-30 2 views
0

최근에 사용자 이름이 매개 변수로 제공되는 사용자의 암호를 얻을 수있는 응용 프로그램을 만들었습니다. 코드를 검사 한 결과 코드를 잘 볼 수있게되었습니다. 이제 클래스 라이브러리를 만들어서 추가 할 수있게되었습니다. 이 assemnbly SQL 서버 2008 년, 내 클래스 라이브러리의 코드입니다 아래. 여기Sql-Clr 보안 예외

ALTER FUNCTION [dbo].[fn_UserCredentials](@UserName [nvarchar](max)) 
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [DNN_USER_CREDENTIALS].[DnnUserCredentials].[GetUserPassword] 

너무 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.Security; 

public class DnnUserCredentials 
{ 
    public static string GetUserPassword(string username) 
    { 
     MembershipUser objUser = Membership.GetUser(username); 
     return objUser.GetPassword(); 
    } 
} 

는 내가 명령이 성공적으로 메시지 완료되었다

CREATE ASSEMBLY DNN_USER_CREDENTIALS FROM 'E:\NBM SITES\SqlProjectDll (DO NOT DELETE)\UserCredentials.dll' WITH PERMISSION_SET = SAFE 

아래와 같이 SQL Server 2008의 어셈블리를 생성하고 난 다음과 같은 기능을 만들어 명령을 성공적으로 완료했습니다. 이제 함수를 호출하려고 할 때

SELECT [dbo].[fn_UserCredentials]('host') 

그것은 오류 아래에 나를 던져 :

A .NET Framework error occurred during execution of user-defined routine or aggregate "fn_UserCredentials": 
System.Security.SecurityException: Request for the permission of type 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. 
System.Security.SecurityException: 
    at DnnUserCredentials.GetUserPassword(String username) 

모든 솔루션을 제공합니다.

답변

0

무엇이 문제 일 수 있는지 잘 모릅니다. 먼저 PERMISSION_SET을 Unrestricted로 변경하십시오. 이 때 Visual Studio에서 DLL을 디버깅하는 데 도움이되지 않습니다.

0

원격 리소스에 액세스하려면 PERMISSION_SET = UNSAFE을 설정해야합니다. TRUSTWORTHY 플래그를 ON으로 설정할 수도 있습니다.

ALTER [<DBName>] SET TRUSTWORTHY ON 
GO 
CREATE ASSEMBLY [<assemblyName>] 
--user with sysadmin rights for this DB may be required for deploing 
AUTHORIZATION [<someSysadmin>] 
FROM '[<pathToDll>]' 
--compiled with unsafe to access EventLog for example 
WITH PERMISSION_SET = UNSAFE 
GO