sp_refresh_parameter_encryption (Transact-SQL)
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure
Обновляет метаданные Always Encrypted для параметров указанной не привязанной к схеме хранимой процедуры, определяемой пользователем функции, представления, триггера DML, триггера DDL уровня базы данных или триггера DDL уровня сервера в текущей базе данных.
Соглашения о синтаксисе Transact-SQL
sp_refresh_parameter_encryption
[ @name = ] N'name'
[ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]
Аргументы
[ @name = ] N'name'
Имя хранимой процедуры, определяемой пользователем функции, представления, триггера DML, триггера DDL уровня базы данных или триггера DDL уровня сервера. @name — nvarchar(776), без значения по умолчанию. @name не может быть хранимой процедурой среды CLR или функцией CLR. @name не может быть привязана к схеме. @name может быть многокомпонентным идентификатором, но может ссылаться только на объекты в текущей базе данных.
[ @namespace = ] N'namespace'
Класс указанного модуля. @namespace — nvarchar(20), с значением по умолчаниюOBJECT
. Если @name является триггером DDL, @namespace требуется. Допустимые входные данные и DATABASE_DDL_TRIGGER
SERVER_DDL_TRIGGER
.
Значения кода возврата
0
(успешно) или ненулевое число (сбой).
Замечания
Метаданные шифрования для параметров модуля могут стать устаревшими, если:
Свойства шифрования столбца в таблице, на которые ссылается модуль, были обновлены. Например, столбец был удален, а новый столбец добавляется с тем же именем, но другим типом шифрования, ключом шифрования или алгоритмом шифрования.
Модуль ссылается на другой модуль с устаревшими метаданными шифрования параметров.
При изменении sp_refresh_parameter_encryption
свойств шифрования таблицы следует запускать для всех модулей прямо или косвенно, ссылающихся на таблицу. Эту хранимую процедуру можно вызывать в любом порядке, не требуя от пользователя сначала обновить внутренний модуль перед переходом к вызывающим модулям.
sp_refresh_parameter_encryption
не влияет на разрешения, расширенные свойства или SET
параметры, связанные с объектом.
Чтобы обновить триггер DDL уровня сервера, необходимо выполнить эту хранимую процедуру в контексте любой базы данных.
Примечание.
При запуске sp_refresh_parameter_encryption
все подписи, связанные с объектом, удаляются.
Разрешения
Требуется ALTER
разрешение на модуль и разрешение на любые определяемые пользователем типы среды CLR и REFERENCES
коллекции схем XML, на которые ссылается объект.
Если указанный модуль является триггером DDL уровня базы данных, требуется ALTER ANY DATABASE DDL TRIGGER
разрешение в текущей базе данных.
Если указанный модуль является триггером DDL уровня сервера, требуется CONTROL SERVER
разрешение.
Для модулей, определенных с предложением EXECUTE AS
, IMPERSONATE
требуется разрешение на указанный субъект. Как правило, обновление объекта не изменяет его EXECUTE AS
субъект, если модуль не определен и EXECUTE AS USER
имя пользователя субъекта теперь разрешает пользователю, отличному от того, что он сделал во время создания модуля.
Примеры
В следующем примере создается таблица и процедура, ссылающаяся на таблицу, настраивается Always Encrypted, а затем демонстрируется изменение таблицы и выполнение sp_refresh_parameter_encryption
процедуры.
Сначала создайте начальную таблицу и хранимую процедуру, ссылающуюся на таблицу.
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
Затем настройте ключи 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
Наконец, замените столбец SSN зашифрованным столбцом и выполните процедуру sp_refresh_parameter_encryption
для обновления компонентов 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