Bagikan melalui


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.

Konvensi sintaks transact-SQL

sp_refresh_parameter_encryption
    [ @name = ] N'name'
    [ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]

Argumen

[ @name = ] N'name'

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.

[ @namespace = ] N'namespace'

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.

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 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.

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)
);
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