열 수준 보안
고객은 열 수준 보안을 통해 사용자의 실행 컨텍스트 또는 해당 그룹 구성원 자격에 따라 테이블 열에 대한 액세스를 제어할 수 있습니다.
열 수준 보안은 애플리케이션의 보안 디자인 및 코딩을 간소화하여 열 액세스를 제한함으로써 중요한 데이터를 보호할 수 있도록 합니다. 예를 들어 특정 사용자가 해당 부서와 관련된 테이블의 특정 열에만 액세스할 수 있도록 합니다. 액세스 제한 논리는 다른 애플리케이션 계층의 데이터와 다소 떨어진 데이터베이스 계층에 위치합니다. 데이터베이스는 모든 계층에서 데이터 액세스를 시도할 때마다 액세스 제한을 적용합니다. 이렇게 제한하면 전체 보안의 노출 영역이 줄어들어 보안 시스템을 보다 안정적이고 강력하게 만들 수 있습니다. 또한 열 수준 보안을 사용하면 사용자에게 액세스 제한을 적용하기 위해 열을 필터링하는 뷰를 도입할 필요가 없습니다.
GRANT Object Permissions T-SQL 구문을 사용하여 열 수준 보안을 구현할 수 있습니다. 이 메커니즘을 사용하면 SQL 인증과 Microsoft Entra ID(이전의 Azure Active Directory) 인증이 모두 지원됩니다.
WHERE
절 필터를 기반으로 테이블에 행 수준 보안을 적용하는 기능도 고려합니다.
구문
개체 권한에 대한 GRANT
문의 구문을 사용하면 테이블의 쉼표로 구분된 열 목록에 권한을 부여할 수 있습니다.
GRANT <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ]
[ AS <database_principal> ]
<permission> ::=
SELECT
| UPDATE
<database_principal> ::=
Database_user
| Database_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
예제
다음 예제는 Membership
테이블의 SSN
열에 액세스하지 못하도록 TestUser
를 제한하는 방법을 보여 줍니다.
사회 보장 번호를 저장하는 데 사용되는 SSN
열이 있는 Membership
테이블을 만듭니다.
CREATE TABLE Membership
(MemberID int IDENTITY,
FirstName varchar(100) NULL,
SSN char(9) NOT NULL,
LastName varchar(100) NOT NULL,
Phone varchar(12) NULL,
Email varchar(100) NULL);
TestUser
는 중요한 데이터가 포함된 SSN
열을 제외한 모든 열에 액세스할 수 있습니다.
GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;
SSN
열이 포함된 경우 TestUser
로 실행된 쿼리가 실패합니다.
SELECT * FROM Membership;
결과 오류는 다음과 같습니다.
Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.
사용 사례
현재 열 수준 보안을 사용하는 방법에 대한 몇 가지 예는 다음과 같습니다.
- 금융 서비스 회사는 계정 관리자만 고객 SSN(사회 보장 번호), 전화 번호 및 기타 개인 데이터에 액세스할 수 있도록 허용합니다.
- 의료 공급업체는 청구 부서의 구성원은 이 데이터를 볼 수 없는 반면, 의사와 간호사만 중요한 의료 기록에 액세스할 수 있도록 허용합니다.