6

특정 사용자가 발행 한 모든 트랜잭션에 대해 nolock 힌트를 강제로 적용하는 방법을 알고있는 사람이 있습니까? 지원 팀에 로그인하여 프로덕션 시스템을 쿼리하고 싶지만, 모든 작업에 대해 강제로 강제로이를 보호하려고합니다. SQL Server 2005를 사용하고 있습니다.SQL 서버 로그인에 대해 nolock 힌트를 강제하는 방법

+0

데이터베이스를 통해 쿼리하는 대상은 무엇입니까? – GateKiller

+0

일반적으로 SQL Server Management Studio를 사용합니다. 그러나 일부는 SQuirereL을 사용한다는 것도 알고 있습니다. – VanOrman

+0

여기에서 달성하고자하는 것을 분명히 할 수 있습니까? DB의 데이터를 보호하려고합니까? –

답변

8

이것은 고통스럽고 해킹 된 방법이지만, 내가 일하는 곳에서 우리가하는 일입니다. 우리는 또한 고전적인 ASP를 사용하고 있으므로 인라인 SQL 호출을 사용하고 있습니다. 우리는 실제로 함수 (여기서는 특정 사용자를 확인할 수 있음)에 sql 호출을 래핑하고 호출 시작 부분에 "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"를 추가합니다.

기능적으로 이것은 잠금없는 힌트와 동일하다고 생각합니다. 죄송합니다. 순수한 SQL 응답이 없으므로이 작업을 수행 할 좋은 방법을 찾으면 도움이됩니다.

+0

이렇게하면 데이터베이스를 보호하면서 원하는 SQL을 쓸 수있는 최선의 방법 일 것입니다. – VanOrman

+0

쿼리 할 때마다 "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"를 실행해야합니까? – Cheung

0

지원팀의 제한된 사용자를 만든 다음 nolock-hint를 사용하여 저장 프로 시저 또는 뷰를 작성할 수 있습니다. 그런 다음 직접 테이블 선택 액세스가 아닌 액세스 권한을 부여하십시오.

0

Espo가 암시 한 것처럼, 나는 당신이 묻는 것을 직접 할 방법이 없다고 확신합니다. 그가 말했듯이 사용자는 NOLOCK이 내장 된 procs 만 사용자의 액세스로 제한하여이를 수행 할 수 있습니다.

11

지원 스태프의 SQL Management Studio를 구성하여 기본 트랜잭션 격리 수준을 READ UNCOMMITTED (도구 -> 옵션 -> 쿼리 실행 -> SQL Server -> 고급)로 설정할 수 있습니다. 이것은 기능상으로 모든 것에 NOLOCK 힌트를 갖는 것과 같습니다.

단점은 지원 팀의 각 구성원마다이 작업을 수행해야하며 SQL Management Studio에서 구성을 변경할 수 있다는 것입니다.

+0

당신은 내 목숨을 구했습니다. –

0

불행히도 사용자를 SP로 제한하면이 목적을 상실합니다. 모든 것을 쿼리하여 문제 해결 기술을 향상시킬 수있는 방법이 있기를 바랬습니다. 도와 줘서 고마워.

1

좋아, 여기서 무엇을하려하는지 명확히해야합니다.

데이터베이스 잠금을 줄이고 데이터베이스에서 실제로 커밋되지 않는 데이터를 지원 사용자에게 제공하려는 경우. 데이터베이스에 원하는 것을 쓸 수있게하는 동안, 놀식이 필요합니다. 사용자는 SET TRANSACTION ISOLATION LEVEL 명령을 사용하여 격리 수준을 계속 높일 수있는 추가 보너스를 받게됩니다.

DB에 대해 물건을 실행할 때 발생할 수있는 손상을 제한하려는 경우 보안 구현을 살펴보고 테이블에 대한 읽기 액세스 만 허용되고 저장된 procs 및 함수에 대한 모든 액세스를 제거하십시오.

나는 NOLOCK이 스택 오버 플로우에서 심하게 오해되어 있음을 찾습니다.

관련 문제