0

바보 같은 질문이지만 SQL Server의 특정 사용자에게 특정 크기 제한을 구현하는 방법이 있습니까? 사용자가 select *를 전송하더라도 결과 세트에는 첫 번째 결과 만 포함됩니다 (예 : 10 개의 결과). 최상위 연산자와 마찬가지로 작동하지만 보안 컨텍스트에서 작동합니다. 이 경우 두 가지 이점이 있습니다. 1) 서버가 비정상적으로 증가하는 adhoc 쿼리를 방지합니다. 2) 중요한 데이터에 대한 액세스를 제한하십시오.모든 사용자 쿼리의 제한 크기 선택

감사합니다.

+0

두 번째 사항에 대해 "상위 10 개가 좋은 보안 상태를 유지하는 방법을 실제로 알지 못합니다. 어쨌든, 나는 그 정의에 TOP 10을 가진 Views를 만들지 않고,이 뷰에만 접근 할 수는 없지만, 가능하다. 그러나 나는 틀릴 수도있다. –

+0

행 수준의 사용 권한을 확인할 수 있습니다. http://msdn.microsoft.com/en-us/library/bb669076(v=vs.110).aspx –

+0

단순히 행 수를 제한하면 과도한 자원 사용을 완화합니다. 예를 들어 "SELECT TOP (1) * FROM BillionRowTable ORDER BY ORDER BY NonIndexedColumn"은 하나의 행만 반환 되더라도 매우 비쌉니다. 대부분 쿼리 계획의 세부 사항에 달려 있습니다. –

답변

0

"set rowcount 10"명령은 멋지다 ... 반환되는 행 수를 제한하고 select 문을 주어진 수로 제한합니다.

좋은 점은 "임의의"SQL 문 ("행 개수 설정 10; 선택 ...") 앞에 추가 할 수 있다는 것입니다. "상위 N"을 삽입 할 위치를 찾기 위해 select 문 (복잡 할 수 있음)을 조정할 필요가 없습니다.

참고 :이 설정은 ("행 개수 0 설정"으로) 전원이 꺼질 때까지 (현재 행 연결에 대해) 효력을 유지하므로 신중하게 관리해야합니다.

http://msdn.microsoft.com/en-us/library/ms188774(v=sql.90).aspx

0

당신은 당신의 테이블에 대한 뷰를 작성하고 suser_sid를 기반으로하는 내에서 SELECT TOP 할 수 있습니다 (여기 Anyway to create a SQL Server DDL trigger for "SELECT" statements? 설명).

이렇게하면 행을 과도하게 선택하지 않고 특정 사용자에 대해 적용 할 수있는 이점이 있으며 변경할 기회가 없습니다.

내가 만난 유일한 시간은 단일 사용자가 데이터베이스의 모든 데이터를 추출하거나 중요한 운영 보안 데이터를 나타내는 과도한 집계를 허용하는 동적 데이터베이스 액세스 (응용 프로그램 외부)를 방지하는 것입니다. ; 일부 데이터는 세부 사항보다 더 위험합니다.