Udostępnij za pośrednictwem


Dodawanie podpisu (języka Transact-SQL)

Dodaje podpisu cyfrowego do procedura przechowywana, funkcja, wirtualny plik dziennika, lub wyzwalacza.

Topic link iconKonwencje składni języka Transact-SQL

ADD [ COUNTER ] SIGNATURE TO module_class::module_name 
    BY <crypto_list> [ ,...n ]

<crypto_list> ::=
    CERTIFICATE cert_name
    | CERTIFICATE cert_name [ WITH PASSWORD = 'password' ]
    | CERTIFICATE cert_name WITH SIGNATURE = signed_blob 
    | ASYMMETRIC KEY Asym_Key_Name
    | ASYMMETRIC KEY Asym_Key_Name [ WITH PASSWORD = 'password' ]
    | ASYMMETRIC KEY Asym_Key_Name WITH SIGNATURE = signed_blob

Argumenty

  • module_class
    Jest to klasa moduł, do którego zostanie dodany podpis.Wartość domyślna dla schematu o zakresie modułów to OBJECT.

  • module_name
    Jest to nazwa procedura przechowywana, funkcja, wirtualny plik dziennika, lub wyzwalacz ma być podpisywany lub podpisane.

  • ŚWIADECTWO cert_name
    Jest to nazwa certyfikat do podpisywania lub kontrasygnować procedura przechowywana, funkcja, które wirtualny plik dziennika, lub wyzwalacza.

  • WITH PASSWORD = "password"
    Jest to hasło, wymaganej do odszyfrowania klucz prywatnego z certyfikat lub klucz asymetrycznego.To klauzula jest wymagana tylko jeśli klucz prywatny nie jest chroniony przez klucz główny bazy danych.

  • PODPISU = signed_blob
    Określa binarny, podpisane dużych obiekt (BLOB) modułu.Tę klauzulę jest użyteczne, jeśli użytkownik chce wysłać moduł bez wysyłania klucz prywatnego.When you use this clause, only the module, signature, and public key are required to add the signed binary large object to a database.signed_blob is the blob itself in hexadecimal format.

  • klucz asymetrycznego Asym_Key_Name
    Jest nazwą klucz asymetrycznego służącą do podpisywania lub counter-sign procedura przechowywana, funkcja, zespół lub wyzwalacza.

Remarks

Moduł jest podpisany lub kontrasygnowane oraz certyfikat lub klucz asymetrycznego, użyty do podpisania go musi już istnieć.Każdy znak w module ma zostać uwzględniona w obliczeniu podpisu.Dotyczy to także wiodącego znaki powrotu karetki, a wiersz źródła danych.

Moduł może być podpisany i kontrasygnowane przez dowolną liczbę certyfikaty i klucze asymetryczne.

Podpis modułu jest usuwane, gdy moduł zostanie zmieniona.

Jeśli moduł zawiera wykonać AS klauzula, identyfikator zabezpieczeń (SID) głównej jest również dołączone jako część procesu podpisywania.

Ostrzeżenie

Moduł podpisywania należy używać tylko do przyznawania uprawnień, nigdy nie do odmowy lub odwołać uprawnienia.

Informacje na temat podpisów są widoczne w widoku sys.crypt_properties wykazu.

Uprawnienia

Wymaga uprawnienia ALTER do obiektu i uprawnienia CONTROL do certyfikatu lub klucza asymetrycznego.Jeśli skojarzony klucz prywatny jest chroniony hasłem, użytkownik również musi mieć hasło.

Przykłady

A.Podpisywanie procedura przechowywana przy użyciu certyfikat

W poniższym przykładzie znaki procedura przechowywana HumanResources.uspUpdateEmployeeLogin przy użyciu certyfikat HumanResourcesDP.

USE AdventureWorks;
ADD SIGNATURE TO HumanResources.uspUpdateEmployeeLogin 
    BY CERTIFICATE HumanResourcesDP;
GO

B.Podpisywanie procedura przechowywana przy użyciu podpisanych BLOB

Poniższy przykład tworzy nową bazę danych i tworzy certyfikat do używania w przykładzie.W przykładzie tworzy i znaki proste procedura przechowywana i pobiera podpisu BLOB od sys.crypt_properties. Procedury jest następnie usunięty i utworzony ponownie.CREATE rola aplikacji (języka Transact-SQL)

CREATE DATABASE TestSignature ;
GO
USE TestSignature ;
GO
-- Create a CERTIFICATE to sign the procedure.
CREATE CERTIFICATE cert_signature_demo 
    ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
    WITH SUBJECT = 'ADD SIGNATURE demo';
GO
-- Create a simple procedure.
CREATE PROC [sp_signature_demo]
AS
    PRINT 'This is the content of the procedure.' ;
GO
-- Sign the procedure.
ADD SIGNATURE TO [sp_signature_demo] 
    BY CERTIFICATE [cert_signature_demo] 
    WITH PASSWORD = 'pGFD4bb925DGvbd2439587y' ;
GO
-- Get the signature binary BLOB for the sp_signature_demo procedure.
SELECT cp.crypt_property
    FROM sys.crypt_properties AS cp
    JOIN sys.certificates AS cer
        ON cp.thumbprint = cer.thumbprint
    WHERE cer.name = 'cert_signature_demo' ;
GO

Podpis crypt_property zwracany przez te instrukcję będzie inny przy każdym utworzeniu procedury.Zanotuj wynik, aby użyć go w dalszej części tego przykładu.W tym przykładzie jest przedstawiony wynik 0x831F5530C86CC8ED606E5BC2720DA835351E46219A6D5DE9CE546297B88AEF3B6A7051891AF3EE7A68EAB37CD8380988B4C3F7469C8EABDD9579A2A5C507A4482905C2F24024FFB2F9BD7A953DD5E98470C4AA90CE83237739BB5FAE7BAC796E7710BDE291B03C43582F6F2D3B381F2102EEF8407731E01A51E24D808D54B373.

-- Drop the procedure so that a new version can be created.
DROP PROC [sp_signature_demo] ;
GO
-- Re-create the procedure by using the exact text including spaces.
CREATE PROC [sp_signature_demo]
AS
    PRINT 'This is the content of the procedure.' ;
GO
-- Add the signature. Use the signature BLOB obtained earlier.
ADD SIGNATURE TO [sp_signature_demo] 
    BY CERTIFICATE [cert_signature_demo]
    WITH SIGNATURE = 0x831F5530C86CC8ED606E5BC2720DA835351E46219A6D5DE9CE546297B88AEF3B6A7051891AF3EE7A68EAB37CD8380988B4C3F7469C8EABDD9579A2A5C507A4482905C2F24024FFB2F9BD7A953DD5E98470C4AA90CE83237739BB5FAE7BAC796E7710BDE291B03C43582F6F2D3B381F2102EEF8407731E01A51E24D808D54B373 ;
GO