2. 证书
2.1 创建证书
当你配置好服务主密钥和数据库主密钥后,你就可以创建证书了。SQL Server可以创建自签名的X.509证书。使用CREATE CERTIFICATE语句来创建证书:
CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ] { FROM <existing_keys> | <generate_new_keys> } [ ACTIVE FOR BEGIN_DIALOG = { ON | OFF } ] <existing_keys> ::= ASSEMBLY assembly_name | { [ EXECUTABLE ] FILE = ‘path_to_file’ [ WITH PRIVATE KEY ( <private_key_options> ) ] } <generate_new_keys> ::= [ ENCRYPTION BY PASSWORD = ‘password’] WITH SUBJECT = ‘certificate_subject_name’ [ , <date_options> [ ,…n ] ] <private_key_options> ::= FILE = ‘path_to_private_key’ [ , DECRYPTION BY PASSWORD = ‘password’ ] [ , ENCRYPTION BY PASSWORD = ‘password’ ] <date_options> ::= START_DATE = ‘mm/dd/yyyy’ | EXPIRY_DATE = ‘mm/dd/yyyy’ |
CREATE CERTIFICATE语句有这么多的选项,幸运的是,大多数时候只用到很少的选项。下面的语句创建一个使用密码来保护的证书:
CREATE CERTIFICATE TestCertificate ENCRYPTION BY PASSWORD = ‘thisIsAP@$$w0rd’ WITH SUBJECT = ‘This is a test certificate’, START_DATE = ‘1/1/2006’, EXPIRY_DATE = ’12/31/2008′; |
如果不使用ENCRYPTION BY PASSWORD子句,证书将使用数据库主密钥来保护。如果不指定START_DATE子句,将使用执行此命令的日期来填写证书的Start Date字段。
除了CREATE CERTIFICATE,SQL Server还提供了DROP CERTIFICATE,ALTER CERTIFICATE,BACKUP CERTIFICATE语句来管理证书。
注:不使用RESTORE语句来恢复证书。使用CREATE CERTIFICATE语句来恢复已经备份的证书。
2.2 使用证书来加密和解密
通过内置的函数EncryptByCert,DecryptByCert和Cert_ID,可以使用证书来加密和解密数据。Cert_ID函数得到指定名字的证书的ID。格式为:
Cert_ID ( ‘cert_name’ ) cert_name为证书的名字。 EncryptByCert函数需要证书ID,格式为: EncryptByCert ( certificate_ID , { ‘cleartext’ | @cleartext } ) |
certificate_ID为通过Cert_ID函数得到的证书ID,cleartext为要加密的明文。类型为 nvarchar、char、varchar、binary、varbinary 或 nchar。EncryptByCert函数的返回值是最大大小为 8,000 个字节的 varbinary。
DecryptByCert语句用来解密先前使用证书加密的数据。格式为:
DecryptByCert (certificate_ID, { ‘ciphertext’ | @ciphertext } [ , { ‘cert_password’ | @cert_password } ] ) |
同样,certificate_ID为通过Cert_ID函数得到的证书ID,ciphertext是加密后的数据。如果创建证书时使用了ENCRYPT BY PASSWORD,则cert_password是当时创建时设定的密码,如果没有使用ENCRYPT BY PASSWORD,那这里也不需要cert_password。
下面的脚本创建数据库主密钥,创建一个测试证书,使用证书进行加密、解密。
— Sample T-SQL Script to demonstrate Certificate Encryption
— Use the AdventureWorks database
USE AdventureWorks;
— Create a Database Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘p@ssw0rd’;
— Create a Temp Table
CREATE TABLE Person.#Temp
(ContactID INT PRIMARY KEY,
FirstName NVARCHAR(200),
MiddleName NVARCHAR(200),
LastName NVARCHAR(200),
eFirstName VARBINARY(200),
eMiddleName VARBINARY(200),
eLastName VARBINARY(200));
— Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate
WITH SUBJECT = ‘Adventureworks Test Certificate’,
EXPIRY_DATE = ’10/31/2009′;
— EncryptByCert demonstration encrypts 100 names from the Person.Contact table
INSERT
INTO Person.#Temp (ContactID, eFirstName, eMiddleName, eLastName)
SELECT ContactID, EncryptByCert(Cert_ID(‘TestCertificate’), FirstName),
EncryptByCert(Cert_ID(‘TestCertificate’), MiddleName),
EncryptByCert(Cert_ID(‘TestCertificate’), LastName)
FROM Person.Contact
WHERE ContactID <= 100;
— DecryptByCert demonstration decrypts the previously encrypted data
UPDATE Person.#Temp
SET FirstName = DecryptByCert(Cert_ID(‘TestCertificate’), eFirstName),
MiddleName = DecryptByCert(Cert_ID(‘TestCertificate’), eMiddleName),
LastName = DecryptByCert(Cert_ID(‘TestCertificate’), eLastName);
— View the results
SELECT *
FROM Person.#Temp;
— Clean up work: drop temp table, test certificate and master key
DROP TABLE Person.#Temp;
DROP CERTIFICATE TestCertificate;
DROP MASTER KEY;
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SQL Server 2005支持服务结束 升级何去何从
SQL Server 2005的支持就要结束了,就在2016年4月12日,SQL Server 2005的客户们应该升级了。
-
SQL Server 2005即将终止服务 你准备好了么?
2016年4月12日,微软将正式终止SQL Server 2005相关服务。微软正在终止扩展支持,这意味着不再有新特性更新,什么都没了。
-
解决SQL服务器提示属性IsLocked不可用于登录用户的错误
在SQL Server中,权限的分配很重要。特别是在用户数量众多的数据库里面,用户权限,架构的划分经常会导致权限之间的冲突,导致无法登陆。
-
TT数据库特别推荐:SQL Server编年史
无论是菜鸟还是资深DBA,除了要掌握基本的数据库管理、操作之外,还需要对不同产品的发展历史有一个了解。