다음을 통해 공유


SQL Server에서 행 수준의 권한 부여(ADO.NET)

업데이트: November 2007

일부 시나리오에서는 데이터에 대한 권한을 부여하거나 취소하거나 거부할 때 사용할 수 있는 것보다 세부적인 수준으로 액세스를 제어해야 합니다. 예를 들어 병원용 데이터베이스 응용 프로그램에서는 환자 정보가 테이블 하나에 저장될 수 있습니다. 이 경우 각 의사가 자신의 담당 환자에 관한 정보만 볼 수 있도록 권한을 제한해야 할 수 있습니다. 재무, 법률, 정부 및 군사용 응용 프로그램을 비롯한 다양한 환경에도 이러한 시나리오가 적용될 수 있습니다. 그러나 SQL Server에서는 행 수준의 보안을 구현할 수 없기 때문에 행 필터링 메커니즘을 정의하는 별도의 열을 테이블에 만들어야 합니다.

행 수준의 권한 구현

행 수준의 권한은 응용 프로그램에서 모든 정보를 테이블 하나에 저장하는 경우에 유용합니다. 각 행에는 사용자 이름, 레이블 또는 식별자와 같은 식별 매개 변수를 정의하는 열이 있습니다. 매개 변수화된 저장 프로시저를 만들고 적절한 값을 전달합니다. 이렇게 하면 사용자는 제공한 값과 일치하는 행만 볼 수 있습니다.

다음 단계에서는 사용자 또는 로그인 이름을 기준으로 행 수준의 권한을 구성하는 방법을 설명합니다.

  • 테이블을 만들고, 이름을 저장할 별도의 열을 추가합니다.

  • 사용자 이름 열을 기반으로 하는 WHERE 절이 포함된 보기를 만듭니다. 이렇게 하면 지정된 값을 가진 행만 반환됩니다. 기본 제공된 함수 중 하나를 사용하여 데이터베이스 사용자 또는 로그인 이름을 지정합니다. 그러면 각 사용자에 대해 개별 보기를 만들지 않아도 됩니다.

    ' Returns the login identification name of the user.
    WHERE UserName = SUSER_SNAME()

    ' USER_NAME or CURRENT_USER Return the database user name.
    WHERE UserName = CURRENT_USER()
  • 기본 테이블이 아니라 보기를 기반으로 데이터를 선택, 삽입, 업데이트 및 삭제하는 저장 프로시저를 만듭니다. 이 보기는 반환되거나 수정되는 행을 제한하는 필터 역할을 합니다.

  • 데이터를 삽입하는 저장 프로시저의 경우 보기의 WHERE 절에 지정한 것과 동일한 함수를 사용하여 사용자 이름을 캡처하고 해당 값을 UserName 열에 삽입합니다.

  • public 역할에 대해 테이블 및 보기에 대한 모든 권한을 거부합니다. WHERE 절은 역할이 아니라 사용자 이름 또는 로그인 이름을 기반으로 하기 때문에 사용자는 다른 데이터베이스 역할에서 권한을 상속할 수 없습니다.

  • 데이터베이스 역할에 저장 프로시저에 대한 EXECUTE 권한을 부여합니다. 사용자는 제공된 저장 프로시저를 통해서만 데이터에 액세스할 수 있습니다.

외부 리소스

자세한 내용은 다음 리소스를 참조하십시오.

Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005(SQL Server TechCenter 사이트)

행 및 셀 수준의 보안을 사용하여 기밀 데이터베이스의 보안 요구 사항을 충족하는 방법을 설명합니다.

참고 항목

개념

SQL Server의 응용 프로그램 보안 시나리오(ADO.NET)

SQL Server에서 저장 프로시저로 권한 관리(ADO.NET)

SQL Server에서 보안 동적 SQL 작성(ADO.NET)

기타 리소스

ADO.NET 응용 프로그램 보안

SQL Server 보안 개요(ADO.NET)