Подписывание хранимых процедур в SQL ServerSigning Stored Procedures in SQL Server

Цифровая сигнатура представляет собой хэш-код данных, зашифрованную при помощи закрытого ключа лица, ставящего свою сигнатуру.A digital signature is a data digest encrypted with the private key of the signer. Закрытый ключ обеспечивает уникальность цифровой сигнатуры его владельцу.The private key ensures that the digital signature is unique to its bearer or owner. Можно подписывать хранимые процедуры, функции (за исключением встроенных функций, возвращающих табличное значение), триггеров и сборок.You can sign stored procedures, functions (except for inline table-valued functions), triggers, and assemblies.

Хранимую процедуру можно подписать сертификатом или асимметричным ключом.You can sign a stored procedure with a certificate or an asymmetric key. Эта возможность предназначена для сценариев, в которых разрешения не могут наследоваться по цепочке владения или если цепочка владения разорвана, например в динамическом SQL.This is designed for scenarios when permissions cannot be inherited through ownership chaining or when the ownership chain is broken, such as dynamic SQL. Затем можно создать пользователя, сопоставленного с сертификатом, предоставив ему разрешения пользователя на доступ к объектам, к которым должна обращаться хранимая процедура.You can then create a user mapped to the certificate, granting the certificate user permissions on the objects the stored procedure needs to access.

Можно также создать имя входа, сопоставленное с тем же сертификатом, а затем предоставить этому имени входа необходимые разрешения уровня сервера или добавить имя входа в одну или несколько предопределенных ролей сервера.You can also create a login mapped to the same certificate, and then grant any necessary server-level permissions to that login, or add the login to one or more of the fixed server roles. Это предназначено для того TRUSTWORTHY , чтобы не включать параметр базы данных для сценариев, в которых требуются разрешения более высокого уровня.This is designed to avoid enabling the TRUSTWORTHY database setting for scenarios in which higher level permissions are needed.

При выполнении хранимой процедуры SQL Server объединяет разрешения пользователя сертификата и (или) имя входа в систему вызывающей стороны.When the stored procedure is executed, SQL Server combines the permissions of the certificate user and/or login with those of the caller. В отличие EXECUTE AS от предложения, он не изменяет контекст выполнения процедуры.Unlike the EXECUTE AS clause, it does not change the execution context of the procedure. Встроенные функции, которые возвращают имя входа и имена пользователей, возвращают имя вызывающей стороны, а не имя пользователя сертификата.Built-in functions that return login and user names return the name of the caller, not the certificate user name.

Создание сертификатовCreating Certificates

При подписывании хранимой процедуры с помощью сертификата или асимметричного ключа дайджест данных, состоящий из зашифрованного хэш-кода хранимой процедуры, а также пользователя, выполняющего функции, создается с помощью закрытого ключа.When you sign a stored procedure with a certificate or asymmetric key, a data digest consisting of the encrypted hash of the stored procedure code, along with the execute-as user, is created using the private key. Во время выполнения сводка данных расшифровывается открытым ключом и сравнивается с хэш-кодом хранимой процедуры.At run time, the data digest is decrypted with the public key and compared with the hash value of the stored procedure. Изменение пользователя, выполняющего проверку подлинности, делает недействительным хэш-значение, чтобы цифровая подпись больше не совпадала.Changing the execute-as user invalidates the hash value so that the digital signature no longer matches. Изменение хранимой процедуры полностью приводит к полному сбросу сигнатуры, что не позволяет пользователю, у которого нет доступа к закрытому ключу, изменять код хранимой процедуры.Modifying the stored procedure drops the signature entirely, which prevents someone who does not have access to the private key from changing the stored procedure code. В любом случае необходимо повторно подписать процедуру каждый раз при изменении кода или при выполнении пользователем.In either case, you must re-sign the procedure each time you change the code or the execute-as user.

При подписывании модуля необходимо выполнить два шага:There are two required steps involved in signing a module:

  1. Создание сертификата с использованием инструкции Transact-SQL CREATE CERTIFICATE [certificateName].Create a certificate using the Transact-SQL CREATE CERTIFICATE [certificateName] statement. Эта инструкция имеет несколько параметров для настройки даты начала и даты окончания, а также пароля.This statement has several options for setting a start and end date and a password. Дата окончания срока действия по умолчанию — один год.The default expiration date is one year.

  2. Подписание процедуры при помощи сертификата с использованием инструкции Transact-SQL ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName].Sign the procedure with the certificate using the Transact-SQL ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName] statement.

После подписания модуля необходимо создать один или несколько участников для хранения дополнительных разрешений, которые должны быть связаны с сертификатом.Once the module has been signed, one or more principals needs to be created in order to hold the additional permissions that should be associated with the certificate.

Если модулю требуются дополнительные разрешения уровня базы данных:If the module needs additional database-level permissions:

  1. Создание пользователя базы данных, связанного с этим сертификатом, с использованием инструкции Transact-SQL CREATE USER [userName] FROM CERTIFICATE [certificateName].Create a database user associated with that certificate using the Transact-SQL CREATE USER [userName] FROM CERTIFICATE [certificateName] statement. Этот пользователь существует только в базе данных и не связан с именем входа, если только имя входа не было создано из этого же сертификата.This user exists in the database only and is not associated with a login unless a login has also been created from that same certificate.

  2. Предоставьте пользователю сертификата необходимые разрешения уровня базы данных.Grant the certificate user the required database-level permissions.

Если модулю требуются дополнительные разрешения уровня сервера:If the module needs additional server-level permissions:

  1. Скопируйте сертификат в master базу данных.Copy the certificate to the master database.

  2. Создайте имя входа, связанное с этим сертификатом, с CREATE LOGIN [userName] FROM CERTIFICATE [certificateName] помощью инструкции Transact-SQL.Create a login associated with that certificate using the Transact-SQL CREATE LOGIN [userName] FROM CERTIFICATE [certificateName] statement.

  3. Предоставьте сертификату имя входа необходимые разрешения уровня сервера.Grant the certificate login the required server-level permissions.

Примечание

Сертификат не может предоставлять разрешения пользователю, у которого разрешения были отменены инструкцией DENY.A certificate cannot grant permissions to a user that has had permissions revoked using the DENY statement. DENY имеет преимущество над GRANT, предотвращая тем самым наследование вызывающей стороной разрешений, предоставленных пользователю сертификата.DENY always takes precedence over GRANT, preventing the caller from inheriting permissions granted to the certificate user.

Внешние ресурсыExternal Resources

Дополнительные сведения см. в следующих ресурсах.For more information, see the following resources.

ResourceResource ОписаниеDescription
Вход модуля в Электронная документация на SQL ServerModule Signing in SQL Server Books Online Описывает подписывание модулей, демонстрирует образец сценария и содержит ссылки на соответствующие разделы по языку Transact-SQL.Describes module signing, providing a sample scenario and links to the relevant Transact-SQL topics.
Подписывание хранимых процедур с помощью сертификата в Электронная документация на SQL ServerSigning Stored Procedures with a Certificate in SQL Server Books Online Предоставляет учебник для подписания хранимой процедуры с помощью сертификата.Provides a tutorial for signing a stored procedure with a certificate.

См. такжеSee also