Aracılığıyla paylaş


sp_refresh_parameter_encryption (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL VeritabanıAzure SQL Yönetilen Örneği

Geçerli veritabanında belirtilen şemaya bağlı olmayan saklı yordamın, kullanıcı tanımlı işlevin, görünümün, DML tetikleyicisinin, veritabanı düzeyinde DDL tetikleyicisinin veya sunucu düzeyinde DDL tetikleyicisinin parametreleri için Always Encrypted meta verilerini güncelleştirir.

Transact-SQL söz dizimi kuralları

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

Arguments

[ @name = ] ‘name

Saklı yordamın adı, kullanıcı tanımlı işlev, görünüm, DML tetikleyicisi, veritabanı düzeyinde DDL tetikleyicisi veya sunucu düzeyinde DDL tetikleyicisi. @namenvarchar(776) şeklindedir ve varsayılan değer yoktur. @name ortak dil çalışma zamanı (CLR) saklı yordamı veya CLR işlevi olamaz. @name şemaya bağlı olamaz. @name çok parçalı bir tanımlayıcı olabilir, ancak yalnızca geçerli veritabanındaki nesnelere başvurabilir.

[ @namespace = ] N'namespace'

Belirtilen modülün sınıfı. @namespacevarsayılan değeri nvarchar(20)'dir OBJECT. @name bir DDL tetikleyicisi olduğunda @namespace gerekir. Geçerli girişler DATABASE_DDL_TRIGGER ve SERVER_DDL_TRIGGER'dir.

Dönüş kodu değerleri

0 (başarı) veya sıfır olmayan bir sayı (hata).

Açıklamalar

Bir modülün parametreleri için şifreleme meta verileri, aşağıdakiler durumunda eski olabilir:

  • Bir tablodaki modülün başvurmuş olduğu bir sütunun şifreleme özellikleri güncelleştirildi. Örneğin, bir sütun kaldırıldı ve aynı ada ancak farklı bir şifreleme türüne, şifreleme anahtarına veya şifreleme algoritmasına sahip yeni bir sütun eklendi.

  • Modül, eski parametre şifreleme meta verilerine sahip başka bir modüle başvurur.

Tablonun şifreleme özellikleri değiştirildiğinde, sp_refresh_parameter_encryption tabloya doğrudan veya dolaylı olarak başvuran tüm modüller için çalıştırılmalıdır. Bu saklı yordam, kullanıcının çağıranlara geçmeden önce iç modülü yenilemesine gerek kalmadan bu modüllerde herhangi bir sırayla çağrılabilir.

sp_refresh_parameter_encryption nesneyle ilişkili izinleri, genişletilmiş özellikleri veya SET seçenekleri etkilemez.

Sunucu düzeyinde bir DDL tetikleyicisini yenilemek için bu saklı yordamı herhangi bir veritabanının bağlamında yürütebilirsiniz.

Uyarı

Herhangi bir nesneyle ilişkilendirilmiş imzalar, sp_refresh_parameter_encryption çalıştırıldığında silinir.

Permissions

Modül üzerinde ALTER izni ve nesne tarafından başvurulan CLR kullanıcı tanımlı türler ve XML şema koleksiyonları üzerinde REFERENCES izni gerektirir.

Belirtilen modül veritabanı düzeyinde bir DDL tetikleyicisi olduğunda geçerli veritabanında izin gerektirir ALTER ANY DATABASE DDL TRIGGER .

Belirtilen modül sunucu düzeyinde bir DDL tetikleyicisi olduğunda, izin gerektirir CONTROL SERVER .

koşul ile EXECUTE AS tanımlanan modüller için belirtilen IMPERSONATE yetkili üzerinde izin gereklidir. Genellikle, bir nesnenin yenilenmesi, modül ile EXECUTE AS tanımlanmadığı ve sorumlunun kullanıcı adı artık modülün oluşturulduğu zamandan farklı bir kullanıcıya çözümlenmediği sürece asıl öğesini değiştirmezEXECUTE AS USER.

Örnekler

Aşağıdaki örnek, tabloya başvuran bir tablo ve yordam oluşturur, Always Encrypted'ı yapılandırır ve ardından tablonun değiştirilmesini ve yordamın çalıştırılmasını sp_refresh_parameter_encryption gösterir.

İlk tabloyu ve tabloya referans veren bir saklı yordam oluşturun.

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

Ardından Always Encrypted anahtarlarını ayarlayın.

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

Son olarak, SSN sütununu şifrelenmiş sütunla değiştirin ve Always Encrypted bileşenlerini güncelleştirmek için yordamı çalıştırın sp_refresh_parameter_encryption .

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

EXECUTE sp_refresh_parameter_encryption [find_patient];
GO