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_encryption
verworfen.
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für