sp_refresh_parameter_encryption (T-SQL)
Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL Database Azure 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.
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