2011-11-16 2 views
1

Crystal Reports의 일괄 처리를 PDF 파일로 실행/내보내기하는 C# 응용 프로그램을 구축하고 있습니다. 일부 테스트에서는 데이터를 보고서로 푸는 것이 훨씬 더 효율적이라는 것을 보여주었습니다. ReportDocument 자체 데이터를 새로 고침하는 것보다 훨씬 효율적입니다.C# 응용 프로그램이 SQL Server 데이터베이스에서만 읽을 수 있도록하려면 어떻게해야합니까?

Crystal Reports에서 SQL을 추출하는 방법을 찾았습니다. 이제는 SQL을 안전하게 실행하고 결과를 다시 Crystal Report에 바인딩하면됩니다. 내 문제는 Crystal Reports가 사용자가 해로운 Crystal Reports를 작성하지 않도록 검사가 내장되어 있지 않다는 것입니다. 당신은 크리스탈 리포트를 만들 SQL 명령 테이블을 추가하고은 "쿼리"로 다음을 제공 할 수 있습니다

DELETE FROM tbl_Test; SELECT * FROM tbl_Test 

크리스탈 리포트는 위의 SQL에 문제가 표시되지 않습니다. 보고서를 새로 고침하면 tbl_Test에있는 모든 데이터가 삭제됩니다. 유일한 제한 사항은 보고서를 작성/실행중인 SQL 사용자의 권한입니다.

그래서 내 프로그램이 유해한 것을 실행/실행하지 않도록해야합니다. 최선의 방법은 모든 데이터베이스에 대한 읽기 전용 액세스 권한을 가진 새 사용자 계정을 SQL Server에 만들고이 계정을 사용하여 응용 프로그램 내에서 연결을 설정하는 것입니다.

이 문제는 사용자가 기존 SQL Server 사용자 계정으로 로그인하게하여 액세스 권한이있는 데이터베이스에 대한 기존 권한이 각각 부여된다는 것입니다. 각 사용자가 개인 권한에 따라 볼 수있는 것을 제한해야하지만이 사용자 중 일부는 많은 데이터베이스에 대한 쓰기 권한을 가지고 있으며 응용 프로그램의 모든 데이터베이스에 대한 연결이 100 % 읽기 전용.

/삽입/업데이트/삭제 권한이있는 사용자 계정의 SQL 인증을 사용하여 SQL Server에 읽기 전용 연결을 설정하는 방법은 무엇입니까?

P. 필자는 충분한 권한/노하우/동기 부여를 가진 사용자가 Crystal Reports (... 또는 3 차 애플리케이션의 수에 관계없이)를 사용하여 데이터베이스에 직접적으로 피해를 줄 수 있음을 알고 있습니다. 지금 나는 내 신청서를 무의미한 공범자로 만들 수 없다는 점에 더 많은 관심을 가지고 있습니다. = P

+11

먼저 읽기 권한보다 많은 권한을 가진 사용자로 데이터베이스에 연결하지 마십시오. – vcsjones

+1

사용자를 배치 할 수있는 스키마 또는 역할을 만든 다음 테이블 사용 권한을 수정하지 않는 이유는 무엇입니까? 결국 스키마 또는 역할에 영향을 미치게됩니다. 그게 .. 만약 당신이 정말로 원하는 것보다 더 많은 접근으로 새로운 사용자를 만들 수 없다면. – Nonym

+0

우리는 많은 수의 데이터베이스를 보유하고 있으며 각 사용자 계정에는 각각 다른 권한이 있습니다. 나는 여전히 모든 사용자가 설정된 권한 범위 내에 있어야 함을 보장해야하지만 내 응용 프로그램이 읽기 전용 작업 만하도록 제한해야합니다. 사용하는 다른 응용 프로그램이 삽입을 허용하더라도/업데이트/삭제. 각 사용자는 액세스 할 수있는 데이터베이스를 제한하는 특정 권한을 가지고 있으므로 별도의 읽기 전용 계정 만 사용할 수는 없습니다. 내 소유를 명확히하는 데 도움이되기를 바랍니다. – Chronicide

답변

5

응용 프로그램 내 모든 것에 동일한 연결을 사용하도록 강요하는 것은 아닙니다. 이 특정 작업에 특정 연결을 사용하지 않는 이유는 무엇입니까? 그렇게하면 모든 기존 사용자 권한을 동일하게 유지할 수 있지만이 특정 작업에 대해 필수 테이블에 대한 읽기 전용 액세스 권한을 가진 sql 사용자와의 새로운 연결을 생성합니다. 그런 식으로 보고서에서 dodgy SQL은 나쁜 일을 할 것입니다.

+0

나는 그것을 좋아한다. 모든 데이터베이스에 대한 읽기 권한을 갖도록 사용자 계정을 설정하는 방법이 있습니까? 앞으로 추가 될 새로운 데이터베이스까지도 포함 할 수 있습니까?그것은 내가 일들이 원활하게 진행되기 전에 지나쳐야 할 마지막 장애물입니다. P 귀하의 제안에 감사드립니다! – Chronicide

+0

향후 데이터베이스는 아니지만 새로운 데이터베이스를 포함하여 각 데이터베이스에서 "공개"시스템 역할에 대한 보안 개체를 지정한 다음보고 사용자에게 공용 역할을 할당하기 만하면됩니다. – KeithS

+0

방금이 방법에 대한 문제가 생각났습니다 ... 읽기 전용 계정에 모든 데이터베이스에 대한 읽기 권한이 무제한이면 로그인 한 사용자가 보고서의 결과를 볼 수 있는지 확인하는 방법이 없습니다. 콘텐츠에 대한 제한이 없습니다. readonly 역할을 추가하고 sql을 제출 한 다음 읽기 전용 역할에서 사용자 계정을 제거하기 위해 임시로 사용자 계정을 변경하는 것이 더 낫지 않습니까? – Chronicide

관련 문제