Freigeben über


sp_refresh_parameter_encryption (Transact-SQL)

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

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

Transact-SQL-Syntaxkonventionen

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

Argumente

[ @name = ] N'name'

Der Name der gespeicherten Prozedur, der benutzerdefinierten Funktion, der Sicht, des DML-Triggers, des DDL-Triggers auf Datenbankebene oder des DDL-Triggers auf Serverebene. @name ist nvarchar(776) und hat keinen Standardwert. @name kann keine CLR-gespeicherte Prozedur (Common Language Runtime) oder CLR-Funktion sein. @name kann nicht schemagebunden sein. @name kann ein mehrteiliger Bezeichner sein, kann jedoch nur auf Objekte in der aktuellen Datenbank verweisen.

[ @namespace = ] N'namespace'

Die Klasse des angegebenen Moduls. @namespace ist nvarchar(20), mit dem Standardwert OBJECT. Wenn @name ein DDL-Trigger ist, ist @namespace erforderlich. Gültige Eingaben sind DATABASE_DDL_TRIGGER und SERVER_DDL_TRIGGER.

Rückgabecodewerte

0 (Erfolg) oder eine Zahl ungleich null (Fehler).

Hinweise

Die Verschlüsselungs-Metadaten für Parameter eines Moduls können veraltet sein, wenn:

  • Verschlüsselungs-Eigenschaften 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 einem anderen Verschlüsselungstyp, Schlüssel oder Verschlüsselungsalgorithmus wird hinzugefügt.

  • Das Modul verweist auf ein anderes Modul mit veralteten Parameter-Verschlüsselungs-Metadaten.

Wenn Verschlüsselungs-Eigenschaften einer Tabelle geändert werden, sollte sp_refresh_parameter_encryption für alle Module ausgeführt werden, die direkt oder indirekt auf die Tabelle verweisen. Diese gespeicherte Prozedur kann in diesen Modulen in beliebiger Reihenfolge aufgerufen werden, ohne dass der Benutzer zuerst das innere Modul aktualisieren muss, bevor er zu seinen Aufrufen übergeht.

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 von sp_refresh_parameter_encryption verworfen.

Berechtigungen

Erfordert die ALTER-Berechtigung für das Modul und die REFERENCES-Berechtigung für alle CLR-benutzerdefinierten Typen und XML-Schema-Sammlungen, auf die durch das Objekt verwiesen wird.

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

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

Zusätzlich ist für Module, die mit der EXECUTE AS-Klausel definiert wurden, die IMPERSONATE-Berechtigung für den angegebenen Prinzipal erforderlich. Im Allgemeinen wird durch die Aktualisierung eines Objekts sein Prinzipal EXECUTE AS nicht geändert, es sei denn, das Modul wurde mit EXECUTE AS USER definiert und der Benutzername des Prinzipals wird jetzt in einen anderen Benutzer aufgelöst als zum Zeitpunkt der Erstellung des Moduls.

Beispiele

Das folgende Beispiel erstellt eine Tabelle und eine Prozedur, die auf die Tabelle verweist, konfiguriert Always Encrypted und demonstriert dann, wie Sie die Tabelle ändern und die sp_refresh_parameter_encryption-Prozedur ausführen.

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)
);
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 = 0x
    016E000001630075007200720065006E00740075007300650072002F006D0079002F006100360036006200620030006600360064006400370030006200640066006600300032006200360032006400300066003800370065003300340030003200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF99137B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA517A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015BDB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE374DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A34723276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550EC5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E035175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D801ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF81A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202FC24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B01958833604707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085
);
GO

Ersetzen Sie schließlich die SSN-Spalte durch die verschlüsselte Spalte, und führen Sie das Verfahren sp_refresh_parameter_encryption 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