sp_refresh_parameter_encryption (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Atualiza os metadados Always Encrypted dos parâmetros do procedimento armazenado não vinculado a esquema, da função definida pelo usuário, da exibição, do gatilho DML, do gatilho DDL no nível do banco de dados ou do gatilho DDL no nível do servidor especificados no banco de dados atual.

Convenções de sintaxe de Transact-SQL

Sintaxe

sys.sp_refresh_parameter_encryption [ @name = ] 'module_name' 
    [ , [ @namespace = ] '<class>' ]
[ ; ]

<class> ::=
{ DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }

Argumentos

[ @name = ] 'module_name' é o nome do procedimento armazenado, da função definida pelo usuário, da exibição, do gatilho de DML, do gatilho de DDL no nível do banco de dados ou do gatilho de DDL no nível do servidor. module_name não pode ser um procedimento armazenado CLR (Common Language Runtime) nem uma função CLR. module_name não pode ser vinculado ao esquema. module_name é nvarchar, sem padrão. module_name pode ser um identificador de várias partes, mas só pode se referir a objetos no banco de dados atual.

[ @namespace = ] ' < class > ' é a classe do módulo especificado. Quando module_name é um gatilho DDL, <class> é obrigatório. <class> é nvarchar(20). As entradas válidas são DATABASE_DDL_TRIGGER e SERVER_DDL_TRIGGER.

Valores do código de retorno

0 (êxito) ou um número diferente de zero (falha)

Comentários

Os metadados de criptografia dos parâmetros de um módulo poderão ficar desatualizados se:

  • As propriedades de criptografia de uma coluna em uma tabela à qual o módulo faz referência foram atualizadas. Por exemplo, uma coluna foi descartada e uma nova coluna com o mesmo nome, mas com um tipo de criptografia diferente, uma chave de criptografia ou um algoritmo de criptografia foi adicionado.
  • O módulo faz referência a outro módulo com metadados de criptografia de parâmetros desatualizados.

Quando as propriedades de criptografia de uma tabela são modificadas, sp_refresh_parameter_encryption deve ser executado em todos os módulos que fazem referência direta ou indireta à tabela. Esse procedimento armazenado pode ser chamado nesses módulos em qualquer ordem, sem exigir que o usuário atualize primeiro o módulo interno antes de passar para seus chamadores.

sp_refresh_parameter_encryption não afeta nenhuma permissão, propriedade estendida ou opção SET que esteja associada ao objeto.

Para atualizar um gatilho DDL de nível de servidor, execute este procedimento armazenado a partir do contexto de qualquer banco de dados.

Observação

Todas as assinaturas associadas ao objeto são descartadas quando você executa sp_refresh_parameter_encryption.

Permissões

Requer a permissão ALTER no módulo e a permissão REFERENCES em todos os tipos de dados CLR definidos pelo usuário e coleções de esquema XML referenciados pelo objeto.

Quando o módulo especificado for um gatilho DDL em nível de banco de dados, será necessária a permissão ALTER ANY DATABASE DDL TRIGGER no banco de dados atual.

Quando o módulo especificado for um gatilho DDL em nível de servidor, será necessária a permissão CONTROL SERVER.

Para módulos definidos com a cláusula EXECUTE AS, a permissão IMPERSONATE é necessária na entidade especificada. Em geral, a atualização de um objeto não altera sua entidade de segurança EXECUTE AS, a menos que o módulo tenha sido definido com EXECUTE AS USER e o nome de usuário da entidade de segurança agora seja um usuário diferente do que era no momento em que o módulo foi criado.

Exemplos

O exemplo a seguir cria uma tabela e um procedimento que faz referência à tabela, configura o Always Encrypted e, em seguida, demonstra a alteração da tabela e a execução do procedimento sp_refresh_parameter_encryption.

Primeiro, crie a tabela inicial e um procedimento armazenado que faça referência a essa tabela.

CREATE TABLE [Patients]([PatientID] [int] IDENTITY(1,1) NOT NULL,
	[SSN] [char](11), 
	[FirstName] [nvarchar](50) NULL,
	[LastName] [nvarchar](50) NOT NULL,
	[MiddleName] [nvarchar](50) NULL,
	[StreetAddress] [nvarchar](50) NOT NULL,
	[City] [nvarchar](50) NOT NULL,
	[ZipCode] [char](5) NOT NULL,
	[State] [char](2) NOT NULL,
	[BirthDate] [date] NOT NULL,
 CONSTRAINT [PK_Patients] PRIMARY KEY CLUSTERED 
(
	[PatientID] ASC
) WITH 
    (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
	 IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
	 ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY];
GO

CREATE PROCEDURE [find_patient] @SSN [char](11)
AS
BEGIN
	SELECT * FROM [Patients] WHERE SSN=@SSN
END;
GO

Em seguida, configure as chaves Always Encrypted.

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 = 
	   0x016E000001630075007200720065006E00740075007300650072002F006D0079002F006100360036006200620030006600360064006400370030006200640066006600300032006200360032006400300066003800370065003300340030003200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF99137B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA517A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015BDB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE374DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A34723276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550EC5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E035175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D801ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF81A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202FC24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B01958833604707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085
);
GO

Por fim, substituímos a coluna SSN pela coluna criptografada e, em seguida, executamos o procedimento sp_refresh_parameter_encryption para atualizar os componentes Always Encrypted.

ALTER TABLE [Patients] DROP COLUMN [SSN];
GO

ALTER TABLE [Patients] 
    ADD	[SSN] [char](11) COLLATE Latin1_General_BIN2 
	ENCRYPTED WITH 
	    (COLUMN_ENCRYPTION_KEY = [CEK1], 
    	ENCRYPTION_TYPE = Deterministic, 
	    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') 
	NOT NULL;
GO

EXEC sp_refresh_parameter_encryption [find_patient];
GO

Confira também

Always Encrypted
Assistente de Always Encrypted