Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam artikel ini
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.
sp_refresh_parameter_encryption
[ @name = ] N'name'
[ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]
Nama prosedur tersimpan, fungsi yang ditentukan pengguna, tampilan, pemicu DML, pemicu DDL tingkat database, atau pemicu DDL tingkat server. @name adalah nvarchar(776), tanpa default. @name tidak dapat menjadi prosedur tersimpan common language runtime (CLR) atau fungsi CLR. @name tidak boleh terikat skema. @name bisa menjadi pengidentifikasi multi-bagian, tetapi hanya dapat merujuk ke objek dalam database saat ini.
Kelas modul yang ditentukan. @namespace adalah nvarchar(20), dengan default OBJECT
. Saat @name adalah pemicu DDL, @namespace diperlukan. Input yang valid adalah DATABASE_DDL_TRIGGER
dan SERVER_DDL_TRIGGER
.
0
(berhasil) atau angka bukan nol (kegagalan).
Metadata enkripsi untuk parameter modul dapat menjadi kedaluarsa, jika:
Properti enkripsi kolom dalam tabel referensi modul, telah diperbarui. Misalnya, kolom dihilangkan dan kolom baru ditambahkan dengan nama yang sama, tetapi jenis enkripsi, kunci enkripsi, atau algoritma enkripsi yang berbeda.
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
.
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 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)
);
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 = 0x
016E000001630075007200720065006E00740075007300650072002F006D0079002F006100360036006200620030006600360064006400370030006200640066006600300032006200360032006400300066003800370065003300340030003200380038006500360066003900330030003500CA0D0CEC74ECADD1804CF99137B4BD06BBAB15D7EA74E0C249A779C7768A5B659E0125D24FF827F5EA8CA517A8E197ECA1353BA814C2B0B2E6C8AB36E3AE6A1E972D69C3C573A963ADAB6686CF5D24F95FE43140C4F9AF48FBA7DF2D053F3B4A1F5693A1F905440F8015BDB43AF8A04BE4E045B89876A0097E5FBC4E6A3B9C3C0D278C540E46C53938B8C957B689C4DC095821C465C73117CBA95B758232F9E5B2FCC7950B8CA00AFE374DE42847E3FBC2FDD277035A2DEF529F4B735C20D980073B4965B4542A34723276A1646998FC6E1C40A3FDB6ABCA98EE2B447F114D2AC7FF8C7D51657550EC5C2BABFFE8429B851272086DCED94332CF18FA854C1D545A28B1EF4BE64F8E035175C1650F6FC5C4702ACF99850A4542B3747EAEC0CC726E091B36CE24392D801ECAA684DE344FECE05812D12CD72254A014D42D0EABDA41C89FC4F545E88B4B8781E5FAF40D7199D4842D2BFE904D209728ED4F527CBC169E2904F6E711FF81A8F4C25382A2E778DD2A58552ED031AFFDA9D9D891D98AD82155F93C58202FC24A77F415D4F8EF22419D62E188AC609330CCBD97CEE1AEF8A18B01958833604707FDF03B2B386487CC679D7E352D0B69F9FB002E51BCD814D077E82A09C14E9892C1F8E0C559CFD5FA841CEF647DAB03C8191DC46B772E94D579D8C80FE93C3827C9F0AE04D5325BC73111E07EEEDBE67F1E2A73580085
);
GO
Terakhir, ganti kolom SSN dengan kolom terenkripsi, dan jalankan 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