sp_refresh_parameter_encryption (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed Instance

Aktualisiert die Always Encrypted-Metadaten für die Parameter der angegebenen nicht schemagebundenen gespeicherten Prozedur, benutzerdefinierte Funktion, Ansicht, DML-Trigger, DDL-Trigger auf Datenbankebene oder DDL-Trigger auf Serverebene in der aktuellen Datenbank.

Transact-SQL-Syntaxkonventionen

Syntax

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

<class> ::=
{ DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }

Argumente

[ @name = ] 'module_name' Ist der Name der gespeicherten Prozedur, benutzerdefinierte Funktion, Ansicht, DML-Trigger, DDL-Trigger auf Datenbankebene oder DDL-Trigger auf Serverebene. module_name kann keine gespeicherte ClR-Prozedur (Common Language Runtime) oder eine CLR-Funktion sein. module_name kann nicht schemagebunden sein. module_name ist nvarchar, ohne Standard. module_name kann ein mehrteiliger Bezeichner sein, kann jedoch nur auf Objekte in der aktuellen Datenbank verweisen.

[ @namespace = ] ' < class > ' Ist die Klasse des angegebenen Moduls. Wenn module_name ein DDL-Trigger ist, <class> ist erforderlich. <class> ist nvarchar(20) Gültige Eingaben sind DATABASE_DDL_TRIGGER und SERVER_DDL_TRIGGER.

Rückgabecodewerte

0 (Erfolg) oder eine Zahl ungleich Null (Fehler)

Hinweise

Die Verschlüsselungsmetadaten für Parameter eines Moduls können veraltet werden, wenn:

  • Verschlüsselungseigenschaften einer Spalte in einer Tabelle, auf die sich die Modulverweise beziehen, wurden aktualisiert. Beispielsweise wurde eine Spalte gelöscht und eine neue Spalte mit demselben Namen, aber ein anderer Verschlüsselungstyp, Verschlüsselungsschlüssel oder ein Verschlüsselungsalgorithmus hinzugefügt.
  • Das Modul verweist auf ein anderes Modul mit veralteten Parameterverschlüsselungsmetadaten.

Wenn Verschlüsselungseigenschaften einer Tabelle geändert werden, sollten sie für alle Module ausgeführt werden, sp_refresh_parameter_encryption die direkt oder indirekt auf die Tabelle verweisen. Diese gespeicherte Prozedur kann in beliebiger Reihenfolge für diese Module aufgerufen werden, ohne dass der Benutzer das innere Modul zuerst aktualisieren muss, bevor er zu seinen Aufrufern wechselt.

sp_refresh_parameter_encryption hat keine Auswirkungen auf Berechtigungen, erweiterte Eigenschaften oder SET Optionen, die dem Objekt zugeordnet sind.

Um einen DDL-Trigger auf Serverebene zu aktualisieren, führen Sie diese gespeicherte Prozedur aus dem Kontext einer beliebigen Datenbank aus.

Hinweis

Alle Signaturen, die dem Objekt zugeordnet sind, werden beim Ausführen sp_refresh_parameter_encryptionverworfen.

Berechtigungen

Erfordert ALTER Berechtigungen für das Modul und REFERENCES die Berechtigung für alle benutzerdefinierten CLR-Typen und XML-Schemasammlungen, auf die vom Objekt verwiesen wird.

Wenn das angegebene Modul ein DDL-Trigger auf Datenbankebene ist, ist die Berechtigung in der aktuellen Datenbank erforderlich ALTER ANY DATABASE DDL TRIGGER .

Wenn das angegebene Modul ein DDL-Trigger auf Serverebene ist, ist die Berechtigung erforderlich CONTROL SERVER .

Für Module, die mit der EXECUTE AS Klausel definiert sind, IMPERSONATE ist die Berechtigung für den angegebenen Prinzipal erforderlich. Im Allgemeinen ändert EXECUTE AS das Aktualisieren eines Objekts seinen Prinzipal nicht, es sei denn, das Modul wurde mit EXECUTE AS USER und der Benutzername des Prinzipals wird nun zu einem anderen Benutzer aufgelöst als zum Zeitpunkt der Erstellung des Moduls.

Beispiele

Im folgenden Beispiel wird eine Tabelle und eine Prozedur erstellt, die auf die Tabelle verweist, Always Encrypted konfiguriert und anschließend das Ändern der Tabelle und das Ausführen der sp_refresh_parameter_encryption Prozedur veranschaulicht.

Erstellen Sie zuerst die erste Tabelle und eine gespeicherte Prozedur, die auf die Tabelle verweist.

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

Richten Sie dann Always Encrypted-Schlüssel ein.

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

Schließlich ersetzen wir die SSN-Spalte durch die verschlüsselte Spalte und führen dann das sp_refresh_parameter_encryption Verfahren aus, um die Always Encrypted-Komponenten zu aktualisieren.

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

Weitere Informationen

Always Encrypted
Always Encrypted Wizard