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
Baza danych SQL w usłudze Microsoft Fabric
Ta funkcja zwraca publiczną część certyfikatu w formacie binarnym. Ta funkcja przyjmuje identyfikator certyfikatu jako argument i zwraca zakodowany certyfikat. Aby utworzyć nowy certyfikat, przekaż wynik binarny do polecenia CREATE CERTIFICATE ... Z PLIKIEM BINARNYM.
Syntax
CERTENCODED ( cert_id )
Arguments
cert_id
Certificate_id certyfikatu. Znajdź tę wartość w pliku sys.certificates; funkcja CERT_ID (Transact-SQL) zwróci ją również.
cert_id ma typ danych int.
Typy zwracane
varbinary
Remarks
Użyj CERTENCODED i CERTPRIVATEKEY razem, aby zwrócić w postaci binarnej różne części certyfikatu.
Permissions
Kod CERTENCODED jest publicznie dostępny.
Examples
Prosty przykład
W tym przykładzie tworzony jest certyfikat o nazwie Shipping04, a następnie używa funkcji CERTENCODED do zwrócenia kodowania binarnego certyfikatu. W tym przykładzie ustawiono datę wygaśnięcia certyfikatu na 31 października 2040 r.
CREATE DATABASE TEST1;
GO
USE TEST1
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '20401031';
GO
SELECT CERTENCODED(CERT_ID('Shipping04'));
B. Kopiowanie certyfikatu do innej bazy danych
Bardziej złożony przykład tworzy dwie bazy danych i SOURCE_DBTARGET_DB. Następnie utwórz certyfikat w SOURCE_DBpliku , a następnie skopiuj certyfikat do pliku TARGET_DB. Na koniec zademonstrować, że dane zaszyfrowane w SOURCE_DBTARGET_DB programie można odszyfrować przy użyciu kopii certyfikatu.
Aby utworzyć przykładowe środowisko, utwórz bazy SOURCE_DB danych i TARGET_DB i klucz główny w każdej bazie danych. Następnie utwórz certyfikat w programie SOURCE_DB.
USE master;
GO
CREATE DATABASE SOURCE_DB;
GO
USE SOURCE_DB;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; -- source database key password
GO
CREATE DATABASE TARGET_DB;
GO
USE TARGET_DB
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; -- password in target database
GO
-- Create a certificate in SOURCE_DB
USE SOURCE_DB;
GO
CREATE CERTIFICATE SOURCE_CERT WITH SUBJECT = 'SOURCE_CERTIFICATE';
GO
Następnie wyodrębnij binarny opis certyfikatu.
DECLARE @CERTENC VARBINARY(MAX);
DECLARE @CERTPVK VARBINARY(MAX);
SELECT @CERTENC = CERTENCODED(CERT_ID('SOURCE_CERT'));
SELECT @CERTPVK = CERTPRIVATEKEY(CERT_ID('SOURCE_CERT'),
'CertEncryptionPa$$word');
SELECT @CERTENC AS BinaryCertificate;
SELECT @CERTPVK AS EncryptedBinaryCertificate;
GO
Następnie utwórz zduplikowany certyfikat w TARGET_DB bazie danych. Zmodyfikuj następujący kod, aby działał, wstawiając dwie wartości binarne — @CERTENC i @CERTPVK — zwróconą w poprzednim kroku. Nie otaczaj tych wartości cudzysłowami.
-- Create the duplicate certificate in the TARGET_DB database
USE TARGET_DB
GO
CREATE CERTIFICATE TARGET_CERT
FROM BINARY = <insert the binary value of the @CERTENC variable>
WITH PRIVATE KEY (
BINARY = <insert the binary value of the @CERTPVK variable>
, DECRYPTION BY PASSWORD = 'CertEncryptionPa$$word');
-- Compare the certificates in the two databases
-- The two certificates should be the same
-- except for name and (possibly) the certificate_id
SELECT * FROM SOURCE_DB.sys.certificates
UNION
SELECT * FROM TARGET_DB.sys.certificates;
Ten kod, wykonywany jako pojedyncza partia, pokazuje, że TARGET_DB może odszyfrować dane pierwotnie zaszyfrowane w pliku SOURCE_DB.
USE SOURCE_DB;
DECLARE @CLEARTEXT nvarchar(100);
DECLARE @CIPHERTEXT varbinary(8000);
DECLARE @UNCIPHEREDTEXT_Source nvarchar(100);
SET @CLEARTEXT = N'Hello World';
SET @CIPHERTEXT = ENCRYPTBYCERT(CERT_ID('SOURCE_CERT'), @CLEARTEXT);
SET @UNCIPHEREDTEXT_Source =
DECRYPTBYCERT(CERT_ID('SOURCE_CERT'), @CIPHERTEXT)
-- Encryption and decryption result in SOURCE_DB
SELECT @CLEARTEXT AS SourceClearText, @CIPHERTEXT AS SourceCipherText,
@UNCIPHEREDTEXT_Source AS SourceDecryptedText;
-- SWITCH DATABASE
USE TARGET_DB;
DECLARE @UNCIPHEREDTEXT_Target nvarchar(100);
SET @UNCIPHEREDTEXT_Target = DECRYPTBYCERT(CERT_ID('TARGET_CERT'), @CIPHERTEXT);
-- Encryption and decryption result in TARGET_DB
SELECT @CLEARTEXT AS ClearTextInTarget, @CIPHERTEXT AS CipherTextInTarget, @UNCIPHEREDTEXT_Target AS DecryptedTextInTarget;
GO
Zobacz także
Funkcje zabezpieczeń (Transact-SQL)
UTWÓRZ CERTYFIKAT (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)