Partilhar via


sp_refresh_parameter_encryption (Transact-SQL)

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

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

Transact-SQL convenções de sintaxe

sp_refresh_parameter_encryption
    [ @name = ] N'name'
    [ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]

Arguments

[ @name = ] N'nome'

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

[ @namespace = ] N'namespace'

A classe do módulo especificado. @namespace é nvarchar(20), com um valor padrão de OBJECT. Quando @name é um gatilho DDL, @namespace é necessário. As entradas válidas são DATABASE_DDL_TRIGGER e SERVER_DDL_TRIGGER.

Valores de código de retorno

0 (sucesso) ou um número diferente de zero (falha).

Observações

Os metadados de criptografia para parâmetros de um módulo podem ficar desatualizados se:

  • As propriedades de criptografia de uma coluna em uma tabela a que o módulo faz referência foram atualizadas. Por exemplo, uma coluna foi descartada e uma nova coluna foi adicionada com o mesmo nome, mas um tipo de criptografia diferente, chave de criptografia ou um algoritmo de criptografia.

  • 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 devem ser executadas para quaisquer módulos que façam referência direta ou indireta à tabela. Este procedimento armazenado pode ser chamado nesses módulos em qualquer ordem, sem exigir que o usuário primeiro atualize o módulo interno antes de passar para os módulos chamadores.

sp_refresh_parameter_encryption não afeta quaisquer permissões, propriedades estendidas ou SET opções associadas ao objeto.

Para atualizar um gatilho DDL no nível do 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 se executa sp_refresh_parameter_encryption.

Permissions

Requer permissão ALTER no módulo e permissão REFERENCES em qualquer tipo CLR definido pelo utilizador e coleções de esquema XML que o objeto referencia.

Quando o módulo especificado é um gatilho de DDL ao nível de banco de dados, requer ALTER ANY DATABASE DDL TRIGGER permissão no banco de dados atual.

Quando o módulo especificado é um trigger DDL ao nível do servidor, é necessária a permissão CONTROL SERVER.

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

Examples

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

Primeiro, crie a tabela inicial e um procedimento armazenado fazendo referência à 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)
);
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 = 0x
    016E000001630075007200720065006E00740075007300650072002F006D0079002F006100360036006200620030006600360064006400370030006200640066006600300032006200360032006400300066003800370065003300340030003200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF99137B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA517A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015BDB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE374DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A34723276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550EC5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E035175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D801ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF81A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202FC24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B01958833604707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085
);
GO

Finalmente, substitua a coluna SSN pela coluna criptografada e execute o sp_refresh_parameter_encryption procedimento 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

EXECUTE sp_refresh_parameter_encryption [find_patient];
GO