sp_refresh_parameter_encryption (T-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL DatabaseAzure SQL Managed Instance yang lebih baru

Memperbarui metadata Always Encrypted untuk parameter prosedur tersimpan yang tidak terikat skema yang ditentukan, fungsi yang ditentukan pengguna, tampilan, pemicu DML, pemicu DDL tingkat database, atau pemicu DDL tingkat server yang ditentukan dalam database saat ini.

Konvensi sintaks transact-SQL

Sintaks

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

<class> ::=
{ DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }

Argumen

[ @name = ] 'module_name' Adalah nama prosedur tersimpan, fungsi yang ditentukan pengguna, tampilan, pemicu DML, pemicu DDL tingkat database, atau pemicu DDL tingkat server. module_name tidak boleh menjadi prosedur tersimpan runtime bahasa umum (CLR) atau fungsi CLR. module_name tidak boleh terikat skema. module_name adalah nvarchar, tanpa default. module_name bisa menjadi pengidentifikasi multi-bagian, tetapi hanya dapat merujuk ke objek dalam database saat ini.

[ @namespace = ] ' < class > ' Adalah kelas modul yang ditentukan. Saat module_name adalah pemicu DDL, <class> diperlukan. <class> adalah nvarchar(20). Input yang valid adalah DATABASE_DDL_TRIGGER dan SERVER_DDL_TRIGGER.

Mengembalikan Nilai Kode

0 (berhasil) atau angka bukan nol (kegagalan)

Keterangan

Metadata enkripsi untuk parameter modul dapat menjadi kedaluarsa, jika:

  • Properti enkripsi kolom dalam tabel referensi modul, telah diperbarui. Misalnya, kolom telah dihilangkan dan kolom baru dengan nama yang sama, tetapi jenis enkripsi, kunci enkripsi, atau algoritma enkripsi yang berbeda telah ditambahkan.
  • Modul mereferensikan modul lain dengan metadata enkripsi parameter yang kedaluarsa.

Saat properti enkripsi tabel dimodifikasi, sp_refresh_parameter_encryption harus dijalankan untuk modul apa pun secara langsung atau tidak langsung merujuk tabel. Prosedur tersimpan ini dapat dipanggil pada modul tersebut dalam urutan apa pun, tanpa mengharuskan pengguna untuk terlebih dahulu me-refresh modul dalam sebelum pindah ke pemanggilnya.

sp_refresh_parameter_encryption tidak memengaruhi izin apa pun, properti yang diperluas, atau SET opsi yang terkait dengan objek.

Untuk me-refresh pemicu DDL tingkat server, jalankan prosedur tersimpan ini dari konteks database apa pun.

Catatan

Tanda tangan apa pun yang terkait dengan objek dihilangkan saat Anda menjalankan sp_refresh_parameter_encryption.

Izin

ALTER Memerlukan izin pada modul dan REFERENCES izin pada jenis yang ditentukan pengguna CLR dan koleksi skema XML yang direferensikan oleh objek.

Ketika modul yang ditentukan adalah pemicu DDL tingkat database, memerlukan ALTER ANY DATABASE DDL TRIGGER izin dalam database saat ini.

Ketika modul yang ditentukan adalah pemicu DDL tingkat server, memerlukan CONTROL SERVER izin.

Untuk modul yang ditentukan dengan EXECUTE AS klausa, IMPERSONATE izin diperlukan pada prinsipal yang ditentukan. Umumnya, me-refresh objek tidak mengubah prinsipalnya EXECUTE AS , kecuali modul didefinisikan dengan EXECUTE AS USER dan nama pengguna prinsipal sekarang diselesaikan ke pengguna yang berbeda dari pada saat modul dibuat.

Contoh

Contoh berikut membuat tabel dan prosedur yang mereferensikan tabel, mengonfigurasi Always Encrypted, lalu menunjukkan perubahan tabel dan menjalankan sp_refresh_parameter_encryption prosedur.

Pertama-tama buat tabel awal dan prosedur tersimpan yang merujuk pada tabel.

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

Kemudian siapkan kunci 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 = 
	   0x016E000001630075007200720065006E00740075007300650072002F006D0079002F006100360036006200620030006600360064006400370030006200640066006600300032006200360032006400300066003800370065003300340030003200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF99137B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA517A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015BDB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE374DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A34723276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550EC5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E035175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D801ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF81A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202FC24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B01958833604707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085
);
GO

Akhirnya kita mengganti kolom SSN dengan kolom terenkripsi, lalu menjalankan sp_refresh_parameter_encryption prosedur untuk memperbarui komponen 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

Lihat Juga

Always Encrypted
Always Encrypted Wizard