2009-10-09 3 views
5

System.Data.SqlClient 코드를 사용하여 Sql Server 데이터베이스에 액세스 할 때 읽기 전용 권한을 적용 할 수 있습니까?SqlCommand를 사용하여 읽기 전용 동작을 적용 할 수 있습니까?

신뢰할 수있는 사용자가 웹 사이트에 자신의 SELECT 문을 작성할 수있게하려고합니다.

아니요 여기를 헤매지 않아요! 분명한 해결책은 데이터베이스에 읽기 전용 사용자를 생성하고 연결 문자열에서 이러한 자격 증명을 사용하는 것입니다. 물론 바보 만 웹 페이지에서 SQL 문을 허용합니다. 이것은 사용자 배포 문제입니다. 다른 사람이 올바르게 설정하도록 신뢰하지 않으며 읽기 전용 연결 문자열이 읽기 전용인지 확인하는 코드를 작성하고 싶지 않습니다.

한 가지 해결책은 SQL을 구문 분석하여 읽기 전용 명령인지 또는 유사한 작업을 수행하는 것입니다. 내가하고 싶은 일은 다음과 같이하는 것입니다.

SqlConnection conn = new SqlConnection(myConnectionString, Flags.Readonly) 

갱신 는 SA의의 권한과 연결 문자열을 감안할 때, "어쩌구에 MYTABLE에 선택 내-dB" "만들 로그인 ㅋ" "보조금을 사용 =" "xxx는 암호를 사용하여 사용자 ㅋ를 만들". 그런 다음 새 연결 문자열을 만드십시오.

답변

2

아니요, 최종 사용자 작업에 부작용이 없도록하는 기능은 기본적으로 제공되지 않습니다. 시나리오가 단순 할 수도 있지만 범용 목적으로 구현하는 것은 불가능하지는 않더라도 엄청나게 복잡 할 것입니다. select 문이 부작용이있는 UDF를 사용하면 어떻습니까?

+0

질문에 대답 해 주셔서 감사합니다. –

+1

EXEC ('DR'+ 'OP'+ 'Tab'+ 'LE'+ 'Us'+ 'ers') –

2

트랜잭션을 사용할 수 있으며 항상 롤백 할 수 있습니까? (하지만 실행 된 sql이 커밋하지 않는지 확인하십시오.)

5

SQL Server에서 새 로그인을 만들고 해당 로그인에 원하는 권한 만 부여하십시오. 그런 다음 연결 문자열에서 응용 프로그램에 해당 로그인을 사용하게합니다. 당신은이 사실을 당신의 게시물에서 확실한 해결책으로 언급하지만, 당신이 왜 이런 식으로하고 싶지는 않은지 나는 알지 못합니다.

+1

예. 데이터베이스에 대한 사용 권한을 처리하는 가장 쉬운 방법입니다.이 사용자가 데이터에 액세스하는 방법과 상관없이 아무 것도 손상시킬 수 없습니다. –

+0

감사합니다. 코드 전용 솔루션이 가능한지 확인하십시오 –

1

야간 백업을 복원하여 다른 데이터베이스를 만들 수도 있습니다. 사용자 만이 데이터베이스에 액세스 할 수 있도록 허용합니다. 그런 다음 사용자는 끔찍한 쿼리로 생산 속도를 늦출 수 없으며 보안에 실패하고 변경이 이루어진 경우에는 아무런 상처를 입을 수 없습니다.

관련 문제