数据库管理:SQL Server 2008安全性探讨
Ruby 发表于:12年09月06日 11:18 [转载] DOIT.com.cn
非对称密钥
- CREATE ASYMMETRIC KEY name [AUTHORIZATION owner] [FROM key_source] WITH ALGORITHM=algrithm [ENCRYPTION BY PASSWORD='password']
在创建非对称密钥时,可以指定密钥对的所有者和密钥源(可以是一个强名称文件、一个程序集或一个可执行的程序集文件)另外,也可以使用一个决定私钥使用的位数的算法,选择密钥成俗是512,1024还是2048位,还可以使用ENCRYPTION BY PASSWORD选项来加密私钥。如果没有指定密码,数据库主密钥将加密私钥
- USE AdventureWorks2008 CREATE ASYMMETRIC KEY HumanResources WITH ALGORITHM=RSA_2048; GO
可以使用ALTER ASYMMETRIC KEY语句更改密钥对的属性,可以使用REMOVE PRIVATE KEY选项将私钥从数据库中删除(确保已经先备份过私钥),或者可以更改保护私钥的方式。例如,可以更改用来加密私钥的密码,然后把保护方式从密码改为数据库主密钥,反之亦然。下面的代码,通过密码加密在前面的例子中创建的HumanResouces密钥对中的私钥:
- USE AdventureWorks2008 ALTER ASYMMETRIC KEY HumanResources WITH PRIVATE KEY (ENCRYPTION BY PASSWORD='P@ssw0rd')
下面的例子中,通过先解密,然后用一个新的密码重新加密的方式更改用于加密私钥的密码
- USE AdventureWorks2008 ALTER ASYMMETRIC KEY HumanResources
- WITH PRIVATE KEY(DECRYPTION BY PASSWORD='P@ssw0rd',ENCRYPTION BY PASSWORD='48UFDSJehf@*hda'); GO
证书
在加密方面,公钥证书和非对称密钥的操作方式一样,不过,密钥对被绑定到证书。公钥包含在省属详细信息中,而私钥必须被安全地归档。与证书关联的私钥必须用密码、数据库主密钥或另外一个加密密钥保护。在加密数据时,最好的做法是使用一个对称密钥加密数据,然后使用公钥加密该对称密钥。
当创建一个自签名证书时,可以使用CREATE CERTIFICATE语句。可以选择一个强密码或者数据库主密钥加密私钥。或者也可以使用CREATE CERTIFICATE语句从一个文件导入证书或私钥。另外,可以基于已签名的程序集创建证书。
在证书创建完成之后,可以使用ALTER CERTIFICATE语句修改证书。可以执行的更改包括改变保护四方的方式或从SQL Server中删除私钥。只有证书被用于验证数字签名时才需要杉树私钥。如果公钥被用来加密数据或对称密钥,那私钥应当可以解密。在创建证书时最好使用 BACKUP CERTIFICATE语句备份证书和关联的私钥。您可以只备份证书而不归档私钥,使用公钥来验证或加密只能用私钥解密的信息。
一旦证书不需要,可以使用DROP CERTIFICATE语句删除。如果证书仍然和其他对象关联,则无法删除。
- --Create the Personnel Data Certificate
- USE AdventureWorks2008; CREATE CERTIFICATE PersonnelDataCert ENCRYPTION BY PASSWORD='HRcertific@te'
- WITH SUBJECT='Personnel Data Encryption Certificate' EXPIRY_DATE='12/31/2011'; GO
- --Backup the certificate and private key to the file system
- Use AdventureWorks2008 BACKUP CERTIFICATE PersonnelDataCert TO FILE='c:\certs\Personnel.cert'
- WITH PRIVATE KEY (DECRYPTION BY PASSWORD='HRcertific@te', FILE='c:\certs\Personnelkey.pvk', ENCRYPTION BY PASSWORD='@notherPassword'); GO
- --Import the certificate and private key into the TempDB database
- USE tempdb CREATE CERTIFICATE PersonnelDataCert FROM FILE='c"\certs\Personnel.cer'
- WITH PRIVATE KEY (FILE='c:\certs\Personnelkey.pvk', DECRYPTION BY PASSWORD='@notherPassword', ENCRYPTION BY PASSWORD='TempDBKey1'); GO
- --更改用于加密私钥的密码
- USE tempdb ALTER CERTIFICATE PersonnelDataCert
- WITH PRIVATE KEY (ENCRYPTION BY PASSWORD='P@ssw0rd789', DECRYPTION BY PASSWORD='TempDBKey1')
- USE AdventureWorks2008 ALTER CERTIFICATE PersonnelDataCert REMOVE PRIVATE KEY
- GO
- USE tempdb DROP CERTIFICATE PersonnelDataCert; GO