Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2016 (13.x) und höhere Versionen
von Azure SQL Database
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
EXECUTE sp_refresh_parameter_encryption [find_patient];
GO