이 기사는 SQL Server 동적 마스킹에 대한 자세한 소개(코드 예제)를 제공합니다. 필요한 친구가 참고할 수 있기를 바랍니다.
DDM(동적 데이터 마스킹)은 SQL Server 2016에 도입된 새로운 기능입니다. 목적은 허가 없이 개인 정보를 볼 수 없도록 제한하는 것입니다. 관리자는 어떤 필드를 마스킹해야 하는지 결정할 수 있는데, 애플리케이션 코드를 변경하지 않고 어떻게 해당 필드를 마스킹할 수 있습니까? 또한 데이터에 액세스하는 방법에 관계없이 일관성이 있는지 확인하는 것도 필요합니다.
이 기능은 Azure SQL Database에 처음 도입된 기능으로, 클라우드 사용자를 대상으로 테스트 중이며 온프레미스 제품으로 마이그레이션되었습니다. 다른 많은 새로운 기능도 이 접근 방식(클라우드-로컬)을 따를 것이라고 생각합니다.
저의 이전 행 수준 데이터 보안과 마찬가지로 데이터 보안 관련 내용이라는 점에 유의해야 합니다. (추천 과정: MySQL 튜토리얼)
열 데이터 마스크
먼저 일부 데이터에 밴드를 생성합니다. 마스크 버전의 테이블. 테이블 정의에서 시작하는 필드 중 하나에 마스크를 추가하겠습니다. 이를 수행하는 방법은 데이터 유형 뒤에 "mask with()" 형식을 사용하는 것입니다. 그러나 NULL 및 기본 옵션 앞에는 괄호 안에 함수를 지정하는 FUNCTION = "가 포함됩니다. 따옴표 안에는 다음을 지정합니다. CREATE TABLE 문은 다음과 같습니다.
CREATE TABLE MyTable ( MySSN VARCHAR (10) MASKED WITH (FUNCTION = 'default()') DEFAULT ('0000000000' ) , MyName VARCHAR (200) DEFAULT ( ' ') , MyEmail VARCHAR (250) DEFAULT ( '') , MyInt int ) GO INSERT dbo. MyTable ( MySSN , MyName, MyEmail , MyInt) VALUES ( '1234567890', 'Steve Jones', 'SomeSteve@SomeDomain.com', 10 )
작성자가 이 테이블을 쿼리하면 이 테이블이 삽입될 때 모든 데이터를 얻습니다. 이는 마찬가지로 dbo 권한이 있는 사용자(db_owner 또는 sysadmin 역할)이기 때문입니다. 이제 높은 권한이 없는 일반 사용자를 생성합니다. 물론 테이블의 데이터를 보려면 일반 SQL Server 권한을 부여해야 합니다.
CREATE USER mytest WITHOUT LOGIN GRANT SELECT ON mytable TO mytest
이제 이 사용자로 이 테이블을 쿼리할 수 있습니다. 차이점은 무엇입니까?
첫 번째 열에 마스킹된 데이터가 포함되어 있음을 알 수 있습니다. 이것은 내가 원하는 작업을 수행합니다. 권한이 없는 사용자에게 데이터를 숨기는 것입니다. 데이터는 권한이 없는 사용자에게 반환될 때만 마스킹됩니다. 실행 계획의 마지막 부분에서 이런 일이 발생하는 것을 볼 수 있는데, 그렇게 하면 사용자에게 계획을 볼 수 있는 권한을 부여해야 합니다. 위의 동일한 쿼리를 사용하여 사용자의 계획
여러 합계 열을 마스킹할 수도 있습니다
ALTER TABLE dbo.MyTable ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()') GO결과는 다음과 같습니다.
보다시피 행마다 다른 마스크를 얻었고 각 마스크가 적용되었습니다.
사용자가 마스킹된 실제 데이터를 볼 수 있도록 합니다
.SQL Server 2016에는 새로운 DDM 권한이 있습니다. 이는 UNMASK 권한이며 다른 권한과 마찬가지로 부여됩니다. 기존 사용자와 동일한 권한을 가진 사용자를 생성합니다. 그런 다음 테이블을 쿼리합니다.
이전과 유사한 결과를 얻은 다음 인증을 사용하여 마스크를 엽니다. 이제 권한이 있는 사용자에게 데이터가 어떻게 표시되는지 확인할 수 있습니다. NewTester 사용자의 경우 모든 데이터가 "마스크 해제"됩니다. 그러나 여기에는 UNMASK 권한이 데이터베이스 전체에 부여됩니다. 테이블이나 열별로 세분성이 없습니다. SELECT 권한이 있는 데이터베이스의 테이블에 저장된 모든 데이터를 볼 수 있습니다. Newtest를 사용하여 첫 번째 테이블을 쿼리하면 이를 확인할 수 있습니다.
마스크 제거
코드는 다음과 같습니다.
CREATE TABLE MySecondTable ( MyEmail VARCHAR( 250) MASKED WITH (FUNCTION= 'email()') , MySSN VARCHAR (10) MASKED WITH (FUNCTION ='default()') , MyID INT MASKED WITH (FUNCTION ='random(1,4)') )GOINSERT MySecondTable VALUES ( 'myname@mydomain.com', '1234567890', 100 ) , ( 'abrother@mycorp.com' , '0123456789' , 555) , ( 'somesister@somecompany.org' , '9876543210' , 999)이렇게 하면 사용자가 실제 데이터를 직접 볼 수 있습니다. MySSN 열의 데이터는 마스킹되지 않았지만 MyEmail과 MyID의 데이터는 여전히 마스킹되어 있습니다
동적 데이터 마스킹은 권한이 없는 사용자의 데이터를 더 쉽게 보호할 수 있도록 설계된 훌륭한 새 기능입니다. 이는 애플리케이션 코드를 변경할 필요 없이 데이터베이스에서 구현될 수 있으므로 최소한의 비용과 노력으로 애플리케이션 사용자의 민감한 데이터를 마스킹할 수 있습니다. 또한 이것이 진정한 보안 기능이 아니라는 점을 상기시키고 싶습니다. 디스크와 테이블에 저장된 데이터는 어떤 방식으로도 변경되지 않습니다. 이는 여전히 일반 텍스트 데이터이며, 사용자가 시스템에 쿼리할 수 있는 경우 잠재적으로 데이터를 쿼리하고 그 값을 발견할 수 있습니다.
어쨌든 이 기능은 특히 데이터 암호 해독이 필요한 시스템에 유용합니다. 물론 기능도 17 이후로 큰 발전을 이루었습니다. 기회가 되면 계속해서 소개하도록 하겠습니다.
위 내용은 SQLServer 동적 마스킹에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!