Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL database w usłudze Microsoft Fabric
Ta funkcja używa klucza symetrycznego do odszyfrowywania danych.
Transact-SQL konwencje składni
Uwaga / Notatka
Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics. W przypadku dedykowanych pul SQL w usłudze Azure Synapse Analytics buforowanie zestawu wyników nie powinno być używane z usługą DECRYPTBYKEY. Jeśli ta funkcja kryptograficzna musi być używana, upewnij się, że buforowanie zestawu wyników jest wyłączone (na poziomie sesji lub na poziomie bazy danych) w czasie wykonywania.
Składnia
DECRYPTBYKEY ( { 'ciphertext' | @ciphertext }
[ , add_authenticator , { authenticator | @authenticator } ] )
Arguments
szyfrogram
Zmienna typu varbinary zawierająca dane zaszyfrowane za pomocą klucza.
@ciphertext
Zmienna typu varbinary zawierająca dane zaszyfrowane za pomocą klucza.
add_authenticator
Wskazuje, czy oryginalny proces szyfrowania zawiera i zaszyfrowany moduł uwierzytelniania wraz z zwykły tekst. Musi być zgodna z wartością przekazaną do funkcji ENCRYPTBYKEY podczas procesu szyfrowania danych. add_authenticator ma typ danych int .
Wystawca uwierzytelnienia
Dane używane jako podstawa generowania wystawcy uwierzytelnienia. Musi być zgodna z wartością podaną w parametrze ENCRYPTBYKEY. Authenticator to nazwa systemu.
@authenticator
Zmienna zawierająca dane, z których generuje wystawca uwierzytelnienia. Musi być zgodna z wartością podaną w parametrze ENCRYPTBYKEY. @authenticator jest nazwą systemu.
Typy zwracane
varbinary o maksymalnym rozmiarze 8000 bajtów.
DECRYPTBYKEY Zwraca NULL wartość , jeśli klucz symetryczny używany do szyfrowania danych nie jest otwarty lub jeśli tekst szyfrowania to NULL.
Uwagi
DECRYPTBYKEY używa klucza symetrycznego. Baza danych musi mieć już otwarty ten klucz symetryczny.
DECRYPTBYKEY umożliwia otwieranie wielu kluczy w tym samym czasie. Nie musisz otwierać klucza bezpośrednio przed odszyfrowywaniem tekstu szyfrującego.
Szyfrowanie symetryczne i odszyfrowywanie zwykle działają szybko i działają dobrze w przypadku operacji obejmujących duże ilości danych.
Wywołanie DECRYPTBYKEY musi nastąpić w kontekście bazy danych zawierającej klucz szyfrowania. Upewnij się, że jest to wywoływane DECRYPTBYKEY z obiektu (takiego jak widok, procedura składowana lub funkcja) znajdującego się w bazie danych.
Permissions
Klucz symetryczny musi być już otwarty w bieżącej sesji. Aby uzyskać więcej informacji, zobacz OPEN SYMMETRIC KEY (OTWÓRZ KLUCZ SYMETRYCZNY).
Przykłady
A. Odszyfrowywanie przy użyciu klucza symetrycznego
W tym przykładzie odszyfrowuje tekst szyfrujący przy użyciu klucza symetrycznego.
-- First, open the symmetric key with which to decrypt the data.
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;
GO
-- Now list the original ID, the encrypted ID, and the
-- decrypted ciphertext. If the decryption worked, the original
-- and the decrypted ID will match.
SELECT NationalIDNumber,
EncryptedNationalID AS 'Encrypted ID Number',
CONVERT (NVARCHAR, DECRYPTBYKEY(EncryptedNationalID)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO
B. Odszyfrowywanie przy użyciu klucza symetrycznego i uwierzytelniania skrótu
Ten przykład odszyfrowuje dane pierwotnie zaszyfrowane razem z wystawcą uwierzytelniania.
-- First, open the symmetric key with which to decrypt the data
OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09;
GO
-- Now list the original card number, the encrypted card number,
-- and the decrypted ciphertext. If the decryption worked,
-- the original number will match the decrypted number.
SELECT CardNumber,
CardNumber_Encrypted AS 'Encrypted card number',
CONVERT (NVARCHAR, DECRYPTBYKEY(CardNumber_Encrypted, 1, HashBytes('SHA1', CONVERT (VARBINARY, CreditCardID)))) AS 'Decrypted card number'
FROM Sales.CreditCard;
C. Nie można odszyfrować, gdy nie jest w kontekście bazy danych z kluczem
W poniższym przykładzie pokazano, że DECRYPTBYKEY należy wykonać je w kontekście bazy danych zawierającej klucz. Wiersz nie jest odszyfrowywane, gdy DECRYPTBYKEY jest wykonywany w master bazie danych; wynikiem jest NULL.
-- Create the database
CREATE DATABASE TestingDecryptByKey;
GO
USE [TestingDecryptByKey]; -- Create the table and view
CREATE TABLE TestingDecryptByKey.dbo.Test (val VARBINARY (8000) NOT NULL);
GO
CREATE VIEW dbo.TestView AS
SELECT CAST (DECRYPTBYKEY(val) AS VARCHAR (30)) AS DecryptedVal
FROM TestingDecryptByKey.dbo.Test;
GO
-- Create the key, and certificate
USE TestingDecryptByKey;
CREATE MASTER KEY ENCRYPTION BY PASSWORD= 'ItIsreallyLong1AndSecured!Password#';
CREATE CERTIFICATE TestEncryptionCertificate
WITH SUBJECT = 'TestEncryption';
CREATE SYMMETRIC KEY TestEncryptSymmetricKey
WITH ALGORITHM = AES_256, IDENTITY_VALUE = 'It is place for test', KEY_SOURCE = 'It is source for test'
ENCRYPTION BY CERTIFICATE TestEncryptionCertificate;
-- Insert rows into the table
DECLARE @var AS VARBINARY (8000), @Val AS VARCHAR (30);
SELECT @Val = '000-123-4567';
OPEN SYMMETRIC KEY TestEncryptSymmetricKey DECRYPTION BY CERTIFICATE TestEncryptionCertificate;
SELECT @var = EncryptByKey(Key_GUID('TestEncryptSymmetricKey'), @Val);
SELECT CAST (DECRYPTBYKEY(@var) AS VARCHAR (30)),
@Val;
INSERT INTO dbo.Test
VALUES (@var);
GO
-- Switch to master
USE [master];
GO
-- Results show the date inserted
SELECT DecryptedVal
FROM TestingDecryptByKey.dbo.TestView;
-- Results are NULL because we are not in the context of the TestingDecryptByKey Database
SELECT CAST (DECRYPTBYKEY(val) AS VARCHAR (30)) AS DecryptedVal
FROM TestingDecryptByKey.dbo.Test;
GO
-- Clean up resources
USE TestingDecryptByKey;
DROP SYMMETRIC KEY TestEncryptSymmetricKey REMOVE PROVIDER KEY;
DROP CERTIFICATE TestEncryptionCertificate;
USE [master];
DROP DATABASE TestingDecryptByKey;
GO