문제

Data Source로 객체를 사용하여 Local Mode에서 Visual Studio 2008의 ReportViewer Control을 사용하고 있습니다. 내 클래스는 데이터베이스의 데이터 테이블에 매핑되어 있습니다. 객체에서는 필요에 따라 관련 객체를로드합니다. 따라서 속성을 사용하려고 할 때까지 참조 널을 남겨두고 데이터베이스에서 자동으로로드하려고합니다. 클래스는 System.data.sqlclient 네임 스페이스를 사용합니다.

Windows 양식 응용 프로그램의 객체와 상호 작용하면 모든 것이 예상대로 작동합니다. 그러나 보고서 데이터 소스로 사용할 객체를 전달하고 관련 객체를 자동으로로드하려고 시도하면 실패합니다. 코드는 sqlconnection 객체를 생성하고 getCommand ()를 호출 할 때 다음과 같은 예외가 발생합니다.

[System.Security.SecurityException] {
"Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."
} System.Security.SecurityException

오류를 검색하려고 시도했지만 표시된 모든 결과는 SQL Server 또는 ASP.NET에서 실행되는 CLR 어셈블리에 대한 것입니다. SQLConnection 객체를 작성하기 전에 내 코드에 다음 호출을 추가하려고 시도했지만 분명히 아무것도하지 않았습니다.

System.Data.SqlClient.SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted).Assert();

어떤 아이디어?

도움이 되었습니까?

해결책 2

솔루션을 찾았습니다. 귀하는 실행 중에 사용하기 위해 LocalReport에 대한 조립품 (또는 충분한 권리가있는)을 실행하는 System.security.policy.evidence를 지정합니다.

reportViewer.LocalReport.ExecuteReportInCurrentAppDomain(System.Reflection.Assembly.GetExecutingAssembly().Evidence);

다른 팁

cuppm의 답변 외에도. 그만큼 ExecuteReportInCurrentAppDomain 방법 LocalReport.SetBasePermissionsForSandboxAppDomain ReportViewer가 지금 대신 사용해야합니다 언제나 샌드 박스 도메인에서 실행 :

PermissionSet permissions = new PermissionSet(PermissionState.None);
permissions.AddPermission(new FileIOPermission(PermissionState.Unrestricted));
permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
ReportViewer1.LocalReport.SetBasePermissionsForSandboxAppDomain(permissions);

자세히보다 여기.

이 권한 오류를 검색하는 동안 내가했던 것처럼 누군가가 이것을 우연히 발견하는 경우를 대비하여. a를 사용 하여이 오류가 발생했습니다 Windows-Forms-Application 고객은 "c : application.exe"대신 " computername c $ application.exe"를 사용하여 컴퓨터의 내 응용 프로그램 -Exe에 단축키를 연결했기 때문입니다. - 이로 인해 신뢰할 수없는 인트라넷 사용으로 인해 System.security.permission의 실패가 발생했습니다.

보다 http://www.duelec.de/blog/?p=236 자세한 내용은.

위의 Artem의 답변에 대한 각주 ...

ASP.NET 앱에 Windows 인증을 추가 할 때이 문제가있었습니다. 프레임 워크 4.5 타겟팅 및보고 구성 요소 사용 11. 익명 사용자 (초기 개발)를 허용했을 때 ReportViewer를 사용하는 데 아무런 문제가 없었습니다. Windows Auth를 활성화하자마자 그룹화에 "#ERROR"를 얻거나 보고서를 전혀 실행할 수 없으므로 위에 나열된 예외를 제공합니다.

나는 문제를 해결할 수 있었지만 Artem이 게시 한 내용의 약간 수정 된 버전으로 작업 할 수있었습니다. CAS가 샌드 박스 보고서 코드를 신뢰할 수 있다는 일반적인 의미 이외의 코드가 무엇을하는지 잘 모르겠습니다. 약간의 설명이있는 의견에 감사드립니다.

    Dim permissions As PermissionSet = New PermissionSet(PermissionState.Unrestricted)
    myReportViewer.LocalReport.SetBasePermissionsForSandboxAppDomain(permissions)

한 가지 빠른 생각, 이것은 내가 본 오류는 아니지만 자원 데이터 소스를 설정하는 코드와 동일한 방법인지 확인하십시오.

System.Data.SqlClient.SqlClientPermission mPermission = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
try
{
    mPermission.Assert();
    //rest of your code
}
//Handle Exceptions

허가 주장은 오랫동안 걸어 다니지 않고 보안 문제가 될 수 있으므로 필요한 코드에 가능한 한 거의 작동하는 것이 효과가있을 가능성이 높습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top