在SQL Server 2008中执行透明数据加密

2016-02-19 19:18 3 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享在SQL Server 2008中执行透明数据加密的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

  问题

  安全是任何公司的一个主要考量。数据库备份容易被偷并被恢复到另一个SQL Server实例上。当我们浏览SQL Server 2008的新特性时,我们对一个叫做透明数据加密的特性很感兴趣,我们可以用它来加密我们的数据库备份。你能为我们详细介绍下应该怎样使用这个新功能吗?

  专家解答

  透明数据加密是SQL Server 2008的一个新特性,它执行数据库级别的加密,补充了目前在SQL Server 2005中使用的记录级别加密。它直接或通过恢复一个数据库备份到另一个SQL Server实例上来保护数据库访问。

  在这篇文章里,我们将看看怎样执行透明数据加密来保护数据库备份。让我们首先介绍下怎样的数据库备份是免受威胁的。默认情况下,SQL Server备份是不加密的。让我们先在我的default实例上创建Northwind数据库的一个完全备份。

  BACKUPDATABASENorthwind
  TODISK='C:Northwind_unencrypted.bak'
  WITHINIT,STATS=10

  让我们在Northwind数据库中查询一条指定记录。我们将在之后使用这条记录来查看我们的数据库备份内容。

  SELECT*FROMdbo.Customers
  WHEREContactName='AriaCruz'

  在记事本中打开数据库备份并搜索“A r i a C r u z”(注意字母间的空格和“Aria”与“"Cruz”间的三个空格,因为这个是Unicode文本)。可以看到这个文本数据是可读的。  

  因为你的本地备份是可读的,所以它们易于受到威胁,因为它们可以以清晰的文本形式读取到。这使得别人只要看看你的数据库备份就可以从这些文件获得数据。更糟的是,任何人都可以将你的数据库备份恢复到另一个SQL Server实例上。我们将简要地介绍这个过程。

  现在我们在我们的Northwind数据库上执行透明数据加密,首先在服务器上建立加密。为了做到这一点,我们在主数据库上创建数据库主钥。

  USEmaster
  GO
  CREATEMASTERKEYENCRYPTIONBYPASSWORD='mY_P@$$w0rd'

  然后,我们创建基于服务器的证书,它将用于加密这个数据库。

  CREATECERTIFICATENorthwindCert
  WITHSUBJECT='MyDEKCertificateforNorthwinddatabase'

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  然后我们将为Northwind数据库设置解密,通过使用我们刚刚创建的证书创建一个数据库加密密钥和密码。

  USENorthwind
  GO
  CREATEDATABASEENCRYPTIONKEY
  WITHALGORITHM=AES_128
  ENCRYPTIONBYSERVERCERTIFICATENorthwindCert
  GO

  因为有一些不同的选择,所以加密算法选择是你自己的。在创建数据库加密密钥之后,我们将激活数据库级别的加密。

  ALTERDATABASENorthwind
  SETENCRYPTIONON

  让我们备份这个加密的Northwind数据库,但是这次使用一个不同的文件名。

  BACKUPDATABASENorthwind
  TODISK='C:Northwind_encrypted.bak'
  WITHINIT,STATS=10

  加密备份花费的时间将比未加密的备份稍长一些。如果你打开这个加密数据库备份并搜索我们之前搜索的字符串“A r i a C r u z”,你将搜索不到它。你可以滚动这个文本并注意到这个加密的数据与你在未加密备份中看到的不一样。

  在另一个SQL Server实例上恢复加密数据库备份

  很容易恢复一个未加密的备份到另一个SQL Server实例上。事实上,这就是为什么它易受威胁的原因。你可以尝试恢复加密的数据库备份为Northwind_encrypted,而你将遇到一个错误。我在我的TEST实例上进行了尝试。这个错误信息告诉你服务器证书找不到。尽管这个恢复失败了,但是你仍然可以在对象浏览器中看到Northwind_encrypted数据库处于正在恢复状态。

  为了在另一个SQL Server实例上恢复加密的数据库备份,首先我们需要导出我们在这个创建了加密数据库备份的实例上创建的证书。为了将这个证书导出到一个文件中,我将连接到我的default实例并运行这个查询。

  USEmaster
  GO
  BACKUPCERTIFICATENorthwindCert
  TOFILE='C:NorthwindCert_File.cer'
  WITHPRIVATEKEY(FILE='C:NorthwindCert_Key.pvk',
  ENCRYPTIONBYPASSWORD='mY_P@$$w0rd')
  GO

  然后,我们将需要复制这个证书和私钥文件到另一个SQL Server实例上。因为我在同一个服务器上运行我的default和我的TEST实例,所以我在做这个导入操作时将直接指向这些文件。现在,在TEST实例上,首先创建一个主钥来导入这个证书。


  USEmaster
  GO
  CREATEMASTERKEYENCRYPTIONBYPASSWORD='EnKrYpt3d_P@$$w0rd'
  GO

  这里提供的密码与你在default实例中用到的密码是不同的,因为你将为这个实例创建一个新的主钥。在创建了一个主钥之后,你可以通过导入我们之前创建的证书来创建一个证书。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  CREATECERTIFICATENorthwindCert
  FROMFILE='C:NorthwindCert_File.cer'
  WITHPRIVATEKEY(FILE='C:NorthwindCert_Key.pvk',
  DECRYPTIONBYPASSWORD='mY_P@$$w0rd');
  GO

  注意,这里在DECRYPTION BY PASSWORD参数中指定的密码是和我们在导出这个证书到一个文件中所使用的一样。这是因为我们将在这个新实例上使用同一个证书来访问加密的数据库。在证书创建之后,我们可以在这个实例上恢复加密数据库备份。你可能想删除最初你在操作之前试图恢复的加密数据库。你现在可以成功地恢复加密数据库备份了。

来源:http://www.tulaoshi.com/n/20160219/1620662.html

延伸阅读
为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名、密码、信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条设计决策就是如何加密存储数据,以此来保证它的安全,免受被他人窥测。 SQL Server中有哪一种支持可以用于加密对象和数据?从一开始就讨论一下SQL Server欠缺什么是...
看MSDN: http://msdn.microsoft.com/zh-cn/library/ms187331.aspx 语法为: WAITFOR { DELAY 'time_to_pass' | TIME 'time_to_execute' | [ ( receive_statement ) | ( get_conversation_group_statement ) ] [ , TIMEOUT timeout ] } 以下示例在晚上 10:20 ( 22:20 ) 执行存储过程 sp_update_job 。 代码如下: USE msdb; E...
在数据库初始化过程中,管理员需要面对的一个现实问题就是如何把大容量的数据导入到数据库系统中。在SQL Server数据库中提供了一些大容量数据导入导出的工具供数据库管理员实用。如管理员可以通过bcp实用工具,实现大容量导出数据和大容量导入数据并生成格式化文件。如可以利用bulk insert语句将大容量数据直接从数据文件导入数据库表或者...
在SQL Server 2008中,为了保护数据库的安全,需要给不同的使用者开通不同的访问用户,那么如何简单的控制用户的权限呢?下面我们就创建一个只读用户,给大家学习使用。 SQL Server 2008 Microsoft SQLServer Management Studio 1、首先打开,用管理员账户登录。这里我选的服务器是,账户是,如果是连接远程的服务器,输入远程服务器地址即...
标签: 服务器
SQL Server 2008 如何备份、还原数据库   SQL Server 2008 备份数据库: 1.打开SQL , 找到要备份的数据库 , 右键 任务 备份 2.弹出 [ 备份数据库对话框 ] ,如图:   3.点击添加 [ 按钮 ] . 如下图:   4.选择要备份的路径 和 备份的文件名 点击 [ 确定 ]. 5.然后就一直点击确定就可以了 . ...

经验教程

867

收藏

55
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部