sp_describe_parameter_encryption(Transact-SQL)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL DatabaseAzure SQL Managed Instance

지정된 Transact-SQL 문 및 해당 매개 변수를 분석하여 Always Encrypted 기능을 사용하여 보호되는 데이터베이스 열에 해당하는 매개 변수를 결정합니다. 암호화된 열에 해당하는 매개 변수에 대한 암호화 메타데이터를 반환합니다.

구문

sp_describe_parameter_encryption   
    [ @tsql = ] N'Transact-SQL_batch' ,   
    [ @params = ] N'parameters'   
[ ;]  

인수

[ @tsql = ] 'Transact-SQL_batch'
하나 이상의 Transact-SQL 문입니다. Transact-SQL_batch nvarchar(n) 또는 nvarchar(max)일 수 있습니다.

[ @params = ] N'parameters'
@params sp_executesql 유사한 Transact-SQL 일괄 처리에 대한 매개 변수에 대한 선언 문자열을 제공합니다. 매개 변수는 nvarchar(n) 또는 nvarchar(max)일 수 있습니다.

Transact-SQL_batch 포함된 모든 매개 변수의 정의를 포함하는 하나의 문자열입니다. 문자열은 유니코드 상수 또는 유니코드 변수여야 합니다. 각 매개 변수 정의는 매개 변수 이름과 데이터 형식으로 구성됩니다. n 은 추가 매개 변수 정의를 나타내는 자리 표시자입니다. 문에 지정된 모든 매개 변수는 @params 정의해야 합니다. 문의 Transact-SQL 문 또는 일괄 처리에 매개 변수 가 없는 경우 @params 필요하지 않습니다. NULL이 이 매개 변수의 기본값입니다.

반환 값

0은 성공을 나타냅니다. 다른 것은 실패를 나타냅니다.

결과 집합

sp_describe_parameter_encryption 두 개의 결과 집합을 반환합니다.

  • 데이터베이스 열에 대해 구성된 암호화 키를 설명하는 결과 집합으로, 지정된 Transact-SQL 문의 매개 변수가 해당합니다.

  • 특정 매개 변수를 암호화하는 방법을 설명하는 결과 집합입니다. 이 결과 집합은 첫 번째 결과 집합에 설명된 키를 참조합니다.

첫 번째 결과 집합의 각 행은 키 쌍을 설명합니다. 암호화된 열 암호화 키 및 해당 열 마스터 키입니다.

열 이름 데이터 형식 설명
column_encryption_key_ordinal int 결과 집합에 있는 행의 ID입니다.
database_id int 데이터베이스 ID입니다.
column_encryption_key_id int 열 암호화 키 ID입니다. 참고: 이 ID는 sys.column_encryption_keys(Transact-SQL) 카탈로그 뷰의 행을 나타냅니다.
column_encryption_key_version int 향후 사용을 위해 예약되어 있습니다. 현재는 항상 1을 포함합니다.
column_encryption_key_metadata_version binary(8) 열 암호화 키의 생성 시간을 나타내는 타임스탬프입니다.
column_encryption_key_encrypted_value varbinary(4000) 열 암호화 키의 암호화된 값입니다.
column_master_key_store_provider_name sysname 열 암호화 키의 암호화된 값을 생성하는 데 사용된 열 마스터 키가 포함된 키 저장소에 대한 공급자의 이름입니다.
column_master_key_path nvarchar(4000) 열 암호화 키의 암호화된 값을 생성하는 데 사용된 열 마스터 키의 키 경로입니다.
column_encryption_key_encryption_algorithm_name sysname 열 암호화 키의 암호화 값을 생성하는 데 사용되는 암호화 알고리즘의 이름입니다.

두 번째 결과 집합의 각 행에는 하나의 매개 변수에 대한 암호화 메타데이터가 포함됩니다.

열 이름 데이터 형식 설명
parameter_ordinal int 결과 집합에 있는 행의 ID입니다.
parameter_name sysname @params 인수에 지정된 매개 변수 중 하나의 이름입니다.
column_encryption_algorithm tinyint 열에 대해 구성된 암호화 알고리즘을 나타내는 코드로, 매개 변수가 해당합니다. 현재 지원되는 값은 AEAD_AES_256_CBC_HMAC_SHA_256 2입니다.
column_encryption_type tinyint 열에 대해 구성된 암호화 유형을 나타내는 코드입니다. 매개 변수는 해당합니다. 지원되는 값은 다음과 같습니다.

0 - 일반 텍스트(열이 암호화되지 않음)

1 - 결정적 암호화

2 - 임의 암호화.
column_encryption_key_ordinal int 첫 번째 결과 집합의 행 코드입니다. 참조된 행은 열에 대해 구성된 열 암호화 키를 설명하며 매개 변수는 해당합니다.
column_encryption_normalization_rule_version tinyint 형식 정규화 알고리즘의 버전 번호입니다.

설명

Always Encrypted를 지원하는 SQL Server 클라이언트 드라이버는 애플리케이션에서 발급한 매개 변수가 있는 쿼리에 대한 암호화 메타데이터를 검색하기 위해 sp_describe_parameter_encryption 자동으로 호출합니다. 그런 다음, 드라이버는 암호화 메타데이터를 사용하여 Always Encrypted로 보호되는 데이터베이스 열에 해당하는 매개 변수 값을 암호화하고 애플리케이션에서 제출한 일반 텍스트 매개 변수 값을 암호화된 매개 변수 값으로 대체한 후 데이터베이스 엔진에 쿼리를 보냅니다.

사용 권한

데이터베이스에서 VIEW ANY COLUMN ENCRYPTION KEY DEFINITIONVIEW ANY COLUMN MASTER KEY DEFINITION 권한이 필요합니다.

CREATE COLUMN MASTER KEY [CMK1]  
WITH  
(  
       KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',  
    KEY_PATH = N'CurrentUser/my/A66BB0F6DD70BDFF02B62D0F87E340288E6F9305'  
);  
GO  
  
CREATE COLUMN ENCRYPTION KEY [CEK1]  
WITH VALUES  
(  
       COLUMN_MASTER_KEY = [CMK1],  
    ALGORITHM = 'RSA_OAEP',  
    ENCRYPTED_VALUE =   
0x016E000001630075007200720065006E00740075007300650072002F006D007  
9002F00610036003600620062003000660036006400640037003000620064006  
6006600300032006200360032006400300066003800370065003300340030003  
200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF991  
37B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA51  
7A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6  
686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015B  
DB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8  
C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE3  
74DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A3472  
3276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550E  
C5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E0  
35175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D8  
01ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B  
4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF8  
1A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202F  
C24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B0195883360  
4707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E  
9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C  
3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085  
);  
GO  
  
CREATE TABLE t1 (  
c1 INT ENCRYPTED WITH (  
    COLUMN_ENCRYPTION_KEY = [CEK1],   
    ENCRYPTION_TYPE = Randomized,   
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,  
);  
  
EXEC sp_describe_parameter_encryption N'INSERT INTO t1 VALUES(@c1)',  N'@c1 INT';  

첫 번째 결과 집합은 다음과 같습니다.

column_encryption_key_ordinal database_id column_encryption_key_id column_encryption_key_version column_encryption_key_metadata_version column_encryption_key_encrypted_value
6 5 1 6 0x99EDA60083A50000 0x016E000001630075007200720065006E00740075007300650072002F006D0079002F006100360036006200620030006600360064006400370030006200640066006600300032006200360032006400300066003800370065003300340030003200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF99137B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA517A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015BDB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE374DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A34723276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550EC5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E035175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D801ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF81A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202FC24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B01958833604707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085

(결과는 계속됩니다.)

column_master_key_store_provider_name column_master_key_path column_encryption_key_encryption_algorithm_name
MSSQL_CERTIFICATE_STORE CurrentUser/my/A66BB0F6DD70BDFF02B62D0F87E340288E6F9305 RSA_OAEP뿐입니다.

두 번째 결과 집합은 다음과 같습니다.

parameter_ordinal parameter_name column_encryption_algorithm column_encryption_type
6 @c1 6 6

(결과는 계속됩니다.)

column_encryption_key_ordinal column_encryption_normalization_rule_version
6 6

참고 항목

Always Encrypted
Always Encrypted를 사용하여 애플리케이션 개발