Compartir a través de


sp_refresh_parameter_encryption (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance

Actualiza los metadatos Always Encrypted para los parámetros del procedimiento almacenado no enlazado a un esquema específico, función definida por el usuario, vista, desencadenador DML, desencadenador DDL de nivel de la base de datos o desencadenador DDL de nivel de servidor en la base de datos actual.

Convenciones de sintaxis de Transact-SQL

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

Argumentos

[ @name = ] N'name'

Nombre del procedimiento almacenado, la función definida por el usuario, la vista, el desencadenador DML, el desencadenador DDL de nivel de base de datos o el desencadenador DDL de nivel de servidor. @name es nvarchar(776), sin ningún valor predeterminado. @name no puede ser un procedimiento almacenado de Common Language Runtime (CLR) ni una función CLR. @name no se puede enlazar al esquema. @name puede ser un identificador de varias partes, pero solo puede hacer referencia a objetos de la base de datos actual.

[ @namespace = ] N'namespace'

La clase del módulo especificado. @namespace es nvarchar(20), con un valor predeterminado de OBJECT. Cuando @name es un desencadenador DDL, es necesario @namespace. Las entradas válidas son DATABASE_DDL_TRIGGER y SERVER_DDL_TRIGGER.

Valores de código de retorno

0 (correcto) o un número distinto de cero (error).

Comentarios

Los metadatos de cifrado de los parámetros de un módulo pueden quedar obsoletos si:

  • Se han actualizado las propiedades de cifrado de una columna de una tabla a las que hace referencia el módulo. Por ejemplo, se ha quitado una columna y se ha agregado una nueva columna con el mismo nombre, pero se ha agregado un tipo de cifrado, una clave de cifrado o un algoritmo de cifrado diferentes.

  • El módulo hace referencia a otro módulo con metadatos de cifrado de parámetros obsoletos.

Cuando se modifican las propiedades de cifrado de una tabla, sp_refresh_parameter_encryption debe ejecutarse para cualquier módulo que haga referencia directa o indirectamente a la tabla. Se puede llamar a este procedimiento almacenado en esos módulos en cualquier orden, sin necesidad de que el usuario actualice primero el módulo interno antes de pasar a sus autores de llamada.

sp_refresh_parameter_encryption no afecta a ningún permiso, propiedades extendidas ni opciones SET asociadas al objeto.

Para actualizar un desencadenador DDL de nivel de servidor, ejecute este procedimiento almacenado desde el contexto de cualquier base de datos.

Nota:

Las firmas asociadas al objeto se quitan al ejecutar sp_refresh_parameter_encryption.

Permisos

Requiere el permiso ALTER en el módulo y el permiso REFERENCES en cualquier tipo definido por el usuario CLR y las colecciones de esquemas XML a los que hace referencia el objeto.

Cuando el módulo especificado es un desencadenador DDL de nivel de base de datos, requiere el permiso ALTER ANY DATABASE DDL TRIGGER en la base de datos actual.

Cuando el módulo especificado es un desencadenador DDL de nivel de servidor, requiere el permiso CONTROL SERVER.

En los módulos definidos con la cláusula EXECUTE AS, es necesario el permiso IMPERSONATE en la entidad de seguridad especificada. Generalmente, al actualizar un objeto no se cambia su entidad de seguridad EXECUTE AS, a menos que el módulo se defina con EXECUTE AS USER y el nombre de usuario de la entidad de seguridad se resuelva ahora como un usuario diferente del usado en el momento en que se creó el módulo.

Ejemplos

En el ejemplo siguiente se crea una tabla y un procedimiento que hace referencia a la tabla, se configura Always Encrypted y, a continuación, se muestra cómo modificar la tabla y ejecutar el procedimiento sp_refresh_parameter_encryption.

En primer lugar, cree la tabla inicial y un procedimiento almacenado que haga referencia a la tabla.

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

A continuación, configure las claves de 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

Por último, se reemplaza la columna SSN por la columna cifrada y, a continuación, se ejecuta el procedimiento sp_refresh_parameter_encryption para actualizar los componentes de 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