Data bootstrap.serverss安全吗

细说SQL Server中的加密 - 文章 - 伯乐在线
& 细说SQL Server中的加密
加密是指通过使用密钥或密码对数据进行模糊处理的过程。在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线。通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义。这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算)。
SQL Server中的加密简介
在SQL Server2000和以前的版本,是不支持加密的。所有的加密操作都需要在程序中完成。这导致一个问题,数据库中加密的数据仅仅是对某一特定程序有意义,而另外的程序如果没有对应的解密算法,则数据变得毫无意义。
到了SQL Server2005,引入了列级加密。使得加密可以对特定列执行,这个过程涉及4对加密和解密的内置函数
SQL Server 2008时代,则引入的了透明数据加密(TDE),所谓的透明数据加密,就是加密在数据库中进行,但从程序的角度来看就好像没有加密一样,和列级加密不同的是,TDE加密的级别是整个数据库。使用TDE加密的数据库文件或备份在另一个没有证书的实例上是不能附加或恢复的。
加密的一些基础知识
加密是指通过使用密钥或密码对数据进行模糊处理的过程。加密解密最简单的过程如图1所示。
图1.一个简单的加密解密过程
通常来说,加密可以分为两大类,对称(Symmetric)加密和非对称(Asymmetric)加密。
对称加密是那些加密和解密使用同一个密钥的加密算法,在图1中就是加密密钥=解密密钥。对称加密通常来说会比较羸弱,因为使用数据时不仅仅需要传输数据本身,还是要通过某种方式传输密钥,这很有可能使得密钥在传输的过程中被窃取。
非对称加密是那些加密和解密使用不同密钥的加密算法,在图1中就是加密密钥!=解密密钥。用于加密的密钥称之为公钥,用于解密的密钥称之为私钥。因此安全性相比对称加密来说会大大提高。当然有一长必有一短,非对称加密的方式通常算法会相比对称密钥来说复杂许多,因此会带来性能上的损失。
因此,一种折中的办法是使用对称密钥来加密数据,而使用非对称密钥来加密对称密钥。这样既可以利用对称密钥的高性能,还可以利用非对称密钥的可靠性。
加密算法的选择
现在流行的很多加密算法都是工业级的,比如对称加密的算法有:DES、3DES、IDEA、FEAL、BLOWFISH.而非对称加密的算法比如经典的RSA。因为这些算法已经公布了比较长的时间,并且经受了很多人的考验,所以通常来说都是比较安全的。
SQL Server提供了比如:DES、Triple DES、TRIPLE_DES_3KEY、RC2、RC4、128 位 RC4、DESX、128 位 AES、192 位 AES 和 256 位 AES这些加密算法,没有某种算法能适应所有要求,每种算法都有长处和短处,关于每种加密算法的细节,请Bing…
但选择算法有一些共通之处:
强加密通常会比较弱的加密占用更多的 CPU 资源。
长密钥通常会比短密钥生成更强的加密。
非对称加密比使用相同密钥长度的对称加密更强,但速度相对较慢。
使用长密钥的块密码比流密码更强。
复杂的长密码比短密码更强。
如果您正在加密大量数据,应使用对称密钥来加密数据,并使用非对称密钥来加密该对称密钥。
不能压缩已加密的数据,但可以加密已压缩的数据。如果使用压缩,应在加密前压缩数据。
SQL Server中的加密层次结构
在SQL Server中,加密是分层级的.根层级的加密保护其子层级的加密。概念如图2所示。
图2.SQL Server加密的层级
由图2可以看出,加密是分层级的。每一个数据库实例都拥有一个服务主密钥(Service Master Key),对应图2中的橙色部分。这个密钥是整个实例的根密钥,在实例安装的时候自动生成,其本身由Windows提供的数据保护API进行保护(Data Pertection API),服务主密钥除了为其子节点提供加密服务之外,还用于加密一些实例级别的信息,比如实例的登录名密码或者链接服务器的信息。
在服务主密钥之下的是数据库主密钥(Database Master Key),也就是图2中土黄色的部分,这个密钥由服务主密钥进行加密。这是一个数据库级别的密钥。可以用于为创建数据库级别的证书或非对称密钥提供加密。每一个数据库只能有一个数据库主密钥,通过T-SQL语句创建,如代码1所示。
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='Pa$ $word'
<div class="crayon-num" data-line="crayon-578be
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='Pa$ $word'
代码1.创建数据库主密钥
数据库主密钥由代码1所示的密码和服务主密钥共同保护。当数据库主密钥创建成功后,我们就可以使用这个密钥创建对称密钥,非对称密钥和证书了。如代码2所示。
--创建证书
CREATE CERTIFICATE CertTest
with SUBJECT = 'Test Certificate'
--创建非对称密钥
CREATE ASYMMETRIC KEY TestAsymmetric
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = 'pa$ $word';
--创建对称密钥
CREATE SYMMETRIC KEY TestSymmetric
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = 'pa$ $word';
1234567891011121314
--创建证书CREATE CERTIFICATE CertTest with SUBJECT = 'Test Certificate'GO--创建非对称密钥CREATE ASYMMETRIC KEY TestAsymmetricWITH ALGORITHM = RSA_2048 ENCRYPTION BY PASSWORD = 'pa$ $word'; GO--创建对称密钥CREATE SYMMETRIC KEY TestSymmetricWITH ALGORITHM = AES_256ENCRYPTION BY PASSWORD = 'pa$ $word';GO
代码2.创建证书,非对称密钥和对称密钥
在代码2中我们看出,并没有显式指定使用数据库主密钥加密证书,对称密钥和非对称密钥。这是因为每个数据库只能有一个数据库主密钥,所以无需指定。创建成功后我们可以在SSMS中查看到刚刚创建的证书,非对称密钥和对称密钥,如图3所示。
图3.查看刚刚创建成功的证书,非对称密钥和对称密钥
由这个加密层级不难推断,如果数据库主密钥被破解,则由其所创建的证书,对称密钥,非对称密钥都有可能被破解。
由图2的层级我们还可以看出,对称密钥不仅仅可以通过密码创建,还可以通过其它对称密钥,非对称密钥和证书创建。如代码3所示。
--由证书加密对称密钥
CREATE SYMMETRIC KEY SymmetricByCert
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE CertT
--由对称密钥加密对称密钥
OPEN SYMMETRIC KEY TestSymmetric
DECRYPTION BY PASSWORD='pa$ $word'
CREATE SYMMETRIC KEY SymmetricBySy
WITH ALGORITHM = AES_256
ENCRYPTION BY SYMMETRIC KEY TestS
--由非对称密钥加密对称密钥
CREATE SYMMETRIC KEY SymmetricByAsy
WITH ALGORITHM = AES_256
ENCRYPTION BY ASYMMETRIC KEY TestAS
<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be
--由证书加密对称密钥CREATE SYMMETRIC KEY SymmetricByCertWITH ALGORITHM = AES_256ENCRYPTION BY CERTIFICATE CertTGO--由对称密钥加密对称密钥OPEN SYMMETRIC KEY TestSymmetricDECRYPTION BY PASSWORD='pa$ $word'&CREATE SYMMETRIC KEY SymmetricBySyWITH ALGORITHM = AES_256ENCRYPTION BY SYMMETRIC KEY TestSGO--由非对称密钥加密对称密钥&CREATE SYMMETRIC KEY SymmetricByAsyWITH ALGORITHM = AES_256ENCRYPTION BY ASYMMETRIC KEY TestASGO
代码3.由几种不同的加密方式创建对称密钥
SQL Server中的数据列加密(Column-level Encryption)
SQL Server在2005引入了列加密的功能。使得可以利用证书,对称密钥和非对称密钥对特定的列进行加密。在具体的实现上,根据加密解密的方式不同,内置了4对函数用于加密解密:
EncryptByCert() 和DecryptByCert()—利用证书对数据进行加密和解密
EncryptByAsymKey() and DecryptByAsymKey()—利用非对称密钥对数据进行加密和解密
EncryptByKey() and DecryptByKey()—利用对称密钥对数据进行加密和解密
EncryptByPassphrase() and DecryptByPassphrase()—利用密码字段产生对称密钥对数据进行加密和解密
因此,加密数据列使用起来相对比较繁琐,需要程序在代码中显式的调用SQL Server内置的加密和解密函数,这需要额外的工作量,并且,加密或解密的列首先需要转换成Varbinary类型。
下面我们来看一个例子:
在AdventureWorks示例数据库中,我们找到Sales.CreditCard表,发现信用卡号是明文显示的(怎么AdventureWorks也像泄漏密码的某IT网站这么没节操)。因此希望对这一列进行加密。
图5.和国内某知名IT网站一样没节操的明文保存重要信息
首先我们需要将CardNumber列转为Varbinary类型。这里通过Select Into新建个表,如代码4所示。
SELECT CreditCardID,
CardNumber_encrypt = CONVERT(varbinary(500), CardNumber),
ModifiedDate
INTO Sales.CreditCard_Encrypt
FROM Sales.CreditCard
WHERE 1&&1
<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be
SELECT CreditCardID, CardType,CardNumber_encrypt = CONVERT(varbinary(500), CardNumber), ExpMonth, ExpYear, ModifiedDateINTO Sales.CreditCard_Encrypt FROM Sales.CreditCard WHERE 1&&1
代码4.通过Select Into创建新表
此时我们利用之前创建的由证书加密的对称密钥来进行列加密,如代码5所示。
--打开之前创建的由证书加密的对称密钥
OPEN SYMMETRIC KEY SymmetricByCert
DECRYPTION BY CERTIFICATE CertTest
--利用这个密钥加密数据并插入新建的表
insert Sales.CreditCard_encrypt (
CardNumber_encrypt,
ModifiedDate
select top 10
CardNumber_encrypt = EncryptByKey(KEY_GUID('SymmetricByCert'), CardNumber),
ModifiedDate
from Sales.CreditCard
123456789101112131415161718
--打开之前创建的由证书加密的对称密钥OPEN SYMMETRIC KEY SymmetricByCertDECRYPTION BY CERTIFICATE CertTest--利用这个密钥加密数据并插入新建的表insert Sales.CreditCard_encrypt (CardType,CardNumber_encrypt, ExpMonth, ExpYear, ModifiedDate) select top 10CardType,CardNumber_encrypt = EncryptByKey(KEY_GUID('SymmetricByCert'), CardNumber),ExpMonth,ExpYear, ModifiedDatefrom Sales.CreditCard
代码5.利用证书加密过的对称密钥加密数据
此时加密列无法直接进行查看,如图6所示:
图6.无法直接查看加密的列
此时可以通过对应的解密函数查看数据,如代码6所示。
OPEN SYMMETRIC KEY SymmetricByCert
DECRYPTION BY CERTIFICATE CertTest
select CardType,
CardNumber = convert(nvarchar(25), DecryptByKey(CardNumber_encrypt)),
ModifiedDate
from Sales.CreditCard_encrypt
OPEN SYMMETRIC KEY SymmetricByCertDECRYPTION BY CERTIFICATE CertTest&select CardType,CardNumber = convert(nvarchar(25), DecryptByKey(CardNumber_encrypt)), ExpMonth, ExpYear, ModifiedDatefrom Sales.CreditCard_encrypt
代码6.由对应的解密函数查看加密的数据
所得到的结果如图7所示。
图7.解密后结果可以正确显示
利用非对称密钥和证书进行加密解密只是函数不同,这里就不测试了。
透明数据加密(Transparent Data Encryption)
在SQL Server 2008中引入了透明数据加密(以下简称TDE),之所以叫透明数据加密,是因为这种加密在使用数据库的程序或用户看来,就好像没有加密一样。TDE加密是数据库级别的。数据的加密和解密是以页为单位,由数据引擎执行的。在写入时进行加密,在读出时进行解密。客户端程序完全不用做任何操作。
TDE的主要作用是防止数据库备份或数据文件被偷了以后,偷数据库备份或文件的人在没有数据加密密钥的情况下是无法恢复或附加数据库的。
TDE使用数据加密密钥(DEK)进行加密。DEK是存在Master数据库中由服务主密钥保护,由的保护层级如图8所示。
图8.TDE的加密层次
开启TDE的数据库的日志和备份都会被自动加密。
因为TDE使得数据库在写入时加密,在读出时解密,因此需要额外的CPU资源,根据微软的说法,需要额外3%-5%的CPU资源。
下面我们来看如何开启TDE
开启TDE非常简单,只需创建数据加密密钥(DEK)后,将加密选项开启就行,如代码7所示。
--基于我们之前创建的证书CertTest,创建DEK
--CertTest需要在Master数据库中
USE AdventureWorks
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE CertTest
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be<div class="crayon-num crayon-striped-num" data-line="crayon-578be<div class="crayon-num" data-line="crayon-578be
--基于我们之前创建的证书CertTest,创建DEK--CertTest需要在Master数据库中USE AdventureWorksGO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CertTestGO--开启TDEALTER DATABASE AdventureWorksSET ENCRYPTION ON
代码7.创建DEK后,开启TDE
这里值得注意的是,DEK是存在所开启TDE的数据库中的。当然,这个操作我们也可以通过在SSMS中右键点击需要开始TDE的数据库,选择任务&#8211;管理数据库加密来进行。如图9所示。
图9.在SSMS中开启TDE
开启TDE后,我们可以通过图10的语句查看TDE的状态。
图10.查看数据库加密状态
本文介绍了加密的基本概念,SQL Server中加密的层级,以及SQL Server中提供的两种不同的加密方式。SQL Server的TDE是一个非常强大的功能,在用户程序中不做任何改变就能达到数据库层面的安全。在使用SQL Server提供的加密技术之前,一定要先对加密的各个功能概念有一个系统的了解,否则很有可能造成的后果是打不开数据库。准备在后续文章中再写关于证书,密钥的备份和恢复….
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
&#8211; 好的话题、有启发的回复、值得信赖的圈子
&#8211; 分享和发现有价值的内容与观点
&#8211; 为IT单身男女服务的征婚传播平台
&#8211; 优秀的工具资源导航
&#8211; 翻译传播优秀的外文文章
&#8211; 国内外的精选文章
&#8211; UI,网页,交互和用户体验
&#8211; 专注iOS技术分享
&#8211; 专注Android技术分享
&#8211; JavaScript, HTML5, CSS
&#8211; 专注Java技术分享
&#8211; 专注Python技术分享
& 2016 伯乐在线Windows_Server_2008_系统安全配置大全_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Windows_Server_2008_系统安全配置大全
上传于||文档简介
&&2&#03;1&#03;年&#8203;的&#8203;W&#8203;i&#8203;n&#8203;d&#8203;o&#8203;w&#8203;s&#8203;_&#8203;S&#8203;e&#8203;r&#8203;v&#8203;e&#8203;r&#8203;_&#03;0&#03;8&#8203;_&#8203;系&#8203;统&#8203;安&#8203;全&#8203;配&#8203;置&#8203;大&#8203;全&#8203;,&#8203;个&#8203;人&#8203;整&#8203;理
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩29页未读,继续阅读
你可能喜欢你好,你装过data collection 的server吗,遇到一个问题急需求助_百度知道
你好,你装过data collection 的server吗,遇到一个问题急需求助
lang_id 子文件夹将为“1033”。选择此选项将安装 32 位版本的 Integration Services 运行时;100&#92;IDE&#92.0&#92.DLL 和 SQLSVC、dtexec 实用工具 (dtexec,那些组件才能正常起作用.RLL;Microsoft SQL Server&#92;Microsoft SQL Server&#92。若必须继续与 Integration Services 包一起运行 DTS 包:不为DTS 包提供 64 位设计时或运行时支持.DLL 和 SQLSVC;80&#92。32 位版本的 Integration Services 运行时和命令提示实用工具;Binn 文件夹中。-或 -在Internet 浏览器中打开 Microsoft SQL Server 2008 Feature Pack(Microsoft SQL Server 2008 功能包)页.DLL,如前面的过程所述,可以按照以下几节中描述的方法安装运行时和设计时支持组件,然后下载并安装“Microsoft SQL Server 2000 DTS 设计器组件”;Common7&#92,在以下过程中将 %ProgramFiles(x86)% 替换为 %ProgramFiles%。安装DTS 包的设计时支持组件SQL Server 2008 不会安装对 DTS 包的设计时支持组件.RLL;Binn&#92,对于美国英语.RLL 文件从 %ProgramFiles%&#92,不提供对 DTS 包的设计时或运行时支持,必须安装以下组件;Microsoft Visual Studio 9;Resources&#92,请参阅 Data Transformation Services (DTS);80&#92;%lang_id% 文件夹中。安装DTS 包的运行时支持组件SQL Server 2008 不会安装对 DTS 包的运行时支持。虽然安装程序可以安装其中某些组件,请按照以下过程中介绍的方法将设计器所需的文件复制到 SQL Server 2008 文件的位置;Tools&#92;Tools&#92.exe) 及其他 Integration Services 工具。确保可以在 Business Intelligence Development Studio 中使用 DTS 设计器将SEMSFC;Binn&#92、SQLGUI。将SEMSFC、查看,则在您尝试使用 DTS 设计器时会显示一条错误消息,DTS 包和使用执行 DTS 2000 包任务来运行 DTS 包的 Integration Services 包只能以 32 位模式运行,如上一节所述。这些默认位置可能会导致 SQL Server 2000 二进制文件路径在 PATH 环境变量中所出现的位置位于 SQL Server 2008 二进制文件路径的前面有关详细信息;Microsoft SQL Server&#92.DLL 文件从 %ProgramFiles%&#92。此选项会安装 ActiveX Script 任务以及 DTS 包迁移向导,在“功能选择”页上完成以下选择;Binn 文件夹中。安装DTS 支持组件的所有功能在安装过程中、SQLGUI,必须按下述步骤完成多项安装,然后才能运行和管理 DTS 包;Tools&#92。(可选)在安装程序运行完毕之后;Common7&#92。在64 位 x86 计算机上安装 32 位版本的 Integration Services 运行时和命令提示实用工具安装过程中。若要在 64 位计算机上在 BI Development Studio 之外以 32 位模式运行包。对于基于 Itanium 的操作系统。将SEMSFC;Tools&#92;100&#92;VSShell&#92,请参阅 SQL Server 2008 中对 Data Transformation Services (DTS) 的支持;Microsoft SQL Server&#92,但要在安装 DTS 运行时支持之后;Common7&#92;Binn&#92:32 位 DTS 运行时;Microsoft SQL Server&#92.RLL 文件从 %ProgramFiles%&#92.RLL 和 SQLSVC;Microsoft Visual Studio 9、SQLGUI、dtexec 实用工具 (Binn&#92;IDE 文件夹中,要了解 SQL Server 2008 在以下情况下不包括 DTS 的支持组件.RLL 和 SQLSVC。因此。在 64 位计算机上,然后才能使用 SQL Server 2008 工具打开并查看 DTS 包;Binn 文件夹复制到 %ProgramFiles%&#92。安装在 64 位计算机上运行 DTS 包所需的附加 32 位文件DTS 包运行时不支持 64 位。此选项会安装“执行 DTS 2000 包”任务,不能在基于 Itanium 的操作系统上创建;Common7&#92。在安装程序运行完毕之后。要在安装 Integration Services 时包括 DTS 支持所需的全部功能;IDE 文件夹中.DLL。注意在64 位计算机上,按本主题后面的“安装 DTS 包设计时支持”一节所述。默认情况下,而 SQL Server 2008 二进制文件位于 %ProgramFiles%&#92,SQL Server 2000 二进制文件位于 %ProgramFiles%&#92;Microsoft SQL Server&#92;Resources 文件夹复制到 %ProgramFiles%&#92,DTS 包和运行 DTS 包的 Integration Services 包只能以 32 位模式运行;Tools&#92;80&#92。有关不推荐使用的 DTS 的详细信息;Resources&#92。必须先按照以下过程中介绍的方法下载并安装此设计时支持组件,请选择“管理工具 - 完整”;IDE&#92,然后下载并安装“Microsoft SQL Server 2005 向后兼容组件”。在 64 位计算机上。安装Data Transformation Services 包的运行时支持组件在用于安装 SQL Server 2008 的安装媒体上;Microsoft SQL Server&#92。例如;80&#92。安装DTS 包支持组件如主题支持SQL Server 2008 中的 Data Transformation Services (DTS) 所述。)计划安装 DTS 包的支持组件时。必须先按照以下过程中介绍的方法安装此运行时支持组件;VSShell&#92;%lang_id% 文件夹中.0&#92。安装Data Transformation Services 包的设计时支持组件在Internet 浏览器中打开 Feature Pack for Microsoft SQL Server 2005 page(Microsoft SQL Server 2005 功能包)网页.DLL 文件从 %ProgramFiles%&#92,找到并运行适用于操作系统的 SQLServer2005_BC*。选择“客户端工具向后兼容性”。注意可以下载的 DTS 包设计器可与 SQL Server 2008 工具结合使用,安装 DTS 设计器,按本主题后面的“安装 DTS 包的运行时支持组件”和“安装在 64 位计算机上运行 DTS 包所需的附加 32 位文件”这两节中所述;Microsoft SQL Server&#92,请选择 Business Intelligence Development Studio 或“管理工具 - 完整”、修改或运行 DTS 包:选择Integration STools&#92;Binn 文件夹复制到 %ProgramFiles%&#92。确保可以在 SQL Server Management Studio 中使用 DTS 设计器将SEMSFC。如果出现这种情况,但尚未针对 SQL Server 2008 更新设计器的功能。选择其中的任一选项将安装 32 位版本的 Integration Services 运行时.msi Windows Installer 包;Tools&#92;Resources 文件夹复制到 %ProgramFiles%&#92,安装 DTS 运行时;80&#92。在Itanium 64 位计算机上安装 32 位版本的 Integration Services 运行时和命令提示实用工具安装过程中;100&#92。若要纠正此错误.exe) 及其他 Integration Services 工具,在 32 位计算机上,SQL Server 2008 中的 DTS 支持由多个组件组成;Tools&#92、SQLGUI
来自:求助得到的回答
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁SQLServer安全规划全攻略_百度百科
SQLServer安全规划全攻略
本词条缺少信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
在改进SQL Server 7.0系列所实现的安全机制的过程中,Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server和数据库的安全进行全面地管理。按照本文介绍的步骤,你可以为SQL Server 7.0(或2000)构造出一个灵活的、可管理的,而且它的安全性经得起考验。
SQLServer安全规划全攻略验证方法选择
本文对验证(authentication)和授权(authorization)这两个概念作不同的解释。验证是指检验用户的身份标识;授权是指允许用户做些什么。在本文的讨论中,验证过程在用户登录SQL Server的时候出现,授权过程在用户试图访问数据或执行命令的时候出现。
构造的第一个步骤是确定SQL Server用哪种方式验证用户。SQL Server的验证是把一组帐户、密码与Master数据库Sysxlogins表中的一个清单进行匹配。Windows NT/2000的验证是请求的合法性。
一般地,如果服务器可以访问,我们应该使用Windows NT/2000验证。可以是Win2K服务器,也可以是NT服务器。无论在哪种情况下,SQL Server都接收到一个访问标记(Access Token)。
访问标记是在验证过程中构造出来的一个特殊列表,其中包含了用户的SID(安全标识号)以及一系列用户所在组的SID。正如本文后面所介绍的,SQL Server以这些SID为基础授予访问权限。
注意,操作系统如何构造访问标记并不重要,SQL Server只使用访问标记中的SID。也就是说,不论你使用SQL Server 2000、SQL Server 7.0、Win2K还是NT进行验证都无关紧要,结果都一样。
如果使用SQL Server验证的登录,它最大的好处是很容易通过Enterprise Manager实现,最大的缺点在于SQL Server验证的登录只对特定的服务器有效,也就是说,在一个多服务器的环境中管理比较困难。
使用SQL Server进行验证的第二个重要的缺点是,对于每一个数据库,我们必须分别地为它管理权限。如果某个用户对两个数据库有相同的权限要求,我们必须手工设置两个数据库的权限,或者编写脚本设置权限。
如果较少,比如25个以下,而且这些用户的权限变化不是很频繁,SQL Server验证的登录或许适用。但是,在几乎所有的其他情况下(有一些例外情况,例如直接管理安全问题的应用),这种登录方式的管理负担将超过它的优点。  
SQLServer安全规划全攻略Web环境中的验证
即使最好的安全策略也常常在一种情形前屈服,这种情形就是在Web应用中使用SQL Server的数据。在这种情形下,进行验证的典型方法是把一组SQL Server登录名称和密码嵌入到Web服务器上运行的程序,比如ASP页面或者CGI脚本;然后,由Web服务器负责验证用户,应用程序则使用它自己的登录帐户(或者是系统管理员sa帐户,或者为了方便起见,使用Sysadmin服务器角色中的登录帐户)为用户访问数据。
这种安排有几个缺点,其中最重要的包括:它不具备对用户在服务器上的活动进行审核的能力,完全依赖于Web应用程序实现用户验证,当SQL Server需要限定用户权限时不同的用户之间不易区别。
如果你使用的是IIS 5.0或者IIS 4.0,你可以用四种方法验证用户。第一种方法是为每一个网站和每一个创建一个匿名用户的NT帐户。此后,所有应用程序登录SQL Server时都使用该安全环境。我们可以通过授予NT匿名帐户合适的权限,改进审核和验证功能。
第二种方法是让所有网站使用Basic验证。此时,只有当用户在对话框中输入了合法的帐户和密码,IIS才会允许他们访问页面。IIS依靠一个NT实现登录,NT安全数据库既可以在本地服务器上,也可以在上。当用户运行一个访问SQL Server数据库的程序或者时,IIS把用户为了浏览页面而提供的身份信息发送给服务器。
如果你使用这种方法,应该记住:在通常情况下,与服务器之间的密码传送一般是不加密的,对于那些使用Basic验证而安全又很重要的网站,你必须实现SSL(Secure Sockets Layer,)。
在只使用IE 5.0、IE 4.0、IE 3.0的情况下,你可以使用第三种验证方法。你可以在Web网站上和上都启用NT验证。IE会把用户登录计算机的身份信息发送给IIS,当该用户试图登录SQL Server时IIS就使用这些登录信息。使用这种简化的方法时,我们可以在一个远程网站的域上对用户身份进行验证(该远程网站登录到一个与运行着Web服务器的域有着信任关系的域)。
最后,如果用户都有个人数字证书,你可以把那些证书映射到本地域的NT帐户上。与服务器数字证书以同样的技术为基础,它证明用户身份标识的合法性,所以可以取代NT的Challenge/Response(质询/回应)验证算法。Netscape和IE都自动在每一个页面请求中把证书信息发送给IIS。IIS提供了一个让管理员把证书映射到NT帐户的工具。因此,我们可以用取代通常的提供帐户名字和密码的登录过程。
由此可见,通过NT帐户验证用户时我们可以使用多种实现方法。即使当用户通过IIS跨越Internet连接SQL Server时,选择仍旧存在。因此,你应该把NT验证作为首选的用户办法。
SQLServer安全规划全攻略设置全局组
构造安全策略的下一个步骤是确定用户应该属于什么组。通常,每一个组织或应用程序的用户都可以按照他们对数据的特定访问要求分成许多类别。例如,会计应用软件的用户一般包括:数据输入操作员,数据输入管理员,报表编写员,会计师,审计员,财务经理等。每一组用户都有不同的数据库访问要求。
控制数据访问权限最简单的方法是,对于每一组用户,分别地为它创建一个满足该组用户权限要求的、域内全局有效的组。我们既可以为每一个应用分别创建组,也可以创建适用于整个企业的、涵盖广泛用户类别的组。
然而,如果你想要能够精确地了解组成员可以做些什么,为每一个应用程序分别创建组是一种较好的选择。例如,在前面的会计系统中,我们应该创建Data Entry Operators、Accounting Data Entry Managers等组。请记住,为了简化管理,最好为组取一个能够明确表示出作用的名字。
除了面向特定应用程序的组之外,我们还需要几个基本组。基本组的成员负责管理服务器。按照习惯,我们可以创建下面这些基本组:SQL Server Administrators,SQL Server Users,SQL Server Denied Users,SQL Server DB Creators,SQL Server Security Operators,SQL Server Database Security Operators,SQL Server Developers,以及 DB_Name Users(其中DB_Name是服务器上一个数据库的名字)。当然,如果必要的话,你还可以创建其他组。
创建了之后,接下来我们可以授予它们访问SQL Server的权限。首先为SQL Server Users创建一个NT验证的登录并授予它登录权限,把Master数据库设置为它的默认数据库,但不要授予它访问任何其他数据库的权限,也不要把这个登录帐户设置为任何服务器角色的成员。
接着再为SQL Server Denied Users重复这个过程,但这次要拒绝登录访问。在SQL Server中,拒绝权限始终优先。创建了这两个组之后,我们就有了一种允许或拒绝用户访问服务器的便捷方法。
为那些没有直接在Sysxlogins系统表里面登记的组授权时,我们不能使用Enterpris Managr,因为Enterprise Manager只允许我们从现有登录名字的列表选择,而不是域内所有组的列表。要访问所有的组,请打开Query Analyzer,然后用系统sp_addsrvrolemember以及进行授权。
对于操作服务器的各个组,我们可以用sp_addsrvrolemember把各个登录加入到合适的服务器角色:SQL Server Administrators成为Sysadmins角色的成员,SQL Server DB Creators成为Dbcreator角色的成员,SQL Server Security Operators成为Securityadmin角色的成员。
注意sp_addsrvrolemember的第一个参数要求是帐户的完整路径。例如,BigCo域的JoeS应该是bigcojoes(如果你想用本地帐户,则路径应该是server_namejoes)。
要创建在所有新数据库中都存在的用户,你可以修改Model数据库。为了简化工作,SQL Server自动把所有对Model数据库的改动复制到新的数据库。只要正确运用Model数据库,我们无需定制每一个新创建的数据库。另外,我们可以用把SQL Server Security Operators加入到db_securityadmin,把SQL Server Developers加入到db_owner角色。
注意我们仍然没有授权任何组或帐户访问数据库。事实上,我们不能通过Enterprise Manager授权数据库访问,因为Enterprise Manager的用户界面只允许我们把数据库访问权限授予合法的登录帐户。
SQL Server不要求NT帐户在我们把它设置为的成员或分配之前能够访问数据库,但Enterprise Manager有这种限制。尽管如此,只要我们使用的是而不是Enterprise Manager,就可以在不授予域内NT帐户数据库访问权限的情况下为任意NT帐户分配权限。
到这里为止,对Model数据库的设置已经完成。但是,如果你的用户群体对企业范围内各个应用数据库有着类似的访问要求,你可以把下面这些操作移到Model数据库上进行,而不是在面向特定应用的数据库上进行。  
SQLServer安全规划全攻略允许数据库访问
在数据库内部,与迄今为止我们对登录验证的处理方式不同,我们可以把权限分配给角色而不是直接把它们分配给。这种能力使得我们能够轻松地在中使用SQL Server验证的登录。即使你从来没有想要使用SQL Server登录帐户,本文仍旧建议分配权限给角色,因为这样你能够为未来可能出现的变化做好准备。
创建了数据库之后,我们可以用sp_grantdbaccess授权DB_Name Users组访问它。但应该注意的是,与sp_grantdbaccess对应的sp_denydbaccess并不存在,也就是说,你不能按照拒绝对服务器访问的方法拒绝对数据库的访问。
如果要拒绝数据库访问,我们可以创建另外一个名为DB_Name Denied Users的,授权它访问数据库,然后把它设置为db_denydatareader以及db_denydatawriter角色的成员。注意SQL语句权限的分配,这里的角色只限制对对象的访问,但不限制对DDL(Data Definition Language,)命令的访问。
正如对登录过程的处理,如果访问标记中的任意SID已经在Sysusers系统表登记,SQL将允许用户访问数据库。因此,我们既可以通过用户的个人NT帐户SID授权用户访问数据库,也可以通过用户所在的一个(或者多个)组的SID授权。
为了简化管理,我们可以创建一个名为DB_Name Users的拥有数据库访问权限的,同时不把访问权授予所有其他的组。这样,我们只需简单地在一个中添加或者删除成员就可以增加或者减少。
SQLServer安全规划全攻略分配权限
实施安全策略的最后一个步骤是创建用户定义的,然后分配权限。完成这个步骤最简单的方法是创建一些名字与名字配套的角色。例如对于前面例子中的会计系统,我们可以创建Accounting Data Entry Operators、Accounting Data Entry Managers之类的角色。
只要规划得恰当,你能够在上完成所有的访问和权限维护工作,使得服务器反映出你在域控制器上进行的各种设置调整。虽然实际应用中情况可能有所变化,但本文介绍的基本措施仍旧适用,它们能够帮助你构造出很容易管理的安全策略。&
由于会计数据库中的角色与帐务处理任务有关,你可能想要缩短这些角色的名字。然而,如果角色名字与的名字配套,你可以减少混乱,能够更方便地判断出哪些组属于特定的角色。
创建好角色之后就可以分配权限。在这个过程中,我们只需用到标准的GRANT、REVOKE和DENY命令。但应该注意DENY权限,这个权限优先于所有其他权限。如果用户是任意具有DENY权限的角色或者组的成员,SQL Server将拒绝用户访问对象。  
接下来我们就可以加入所有SQL Server验证的登录。用户定义的可以包含SQL Server登录以及NT、、个人帐户,这是它最宝贵的特点之一。用户定义的可以作为各种登录的通用容器,我们使用用户定义角色而不是直接把权限分配给的主要原因就在于此。  
由于内建的角色一般适用于整个数据库而不是单独的对象,因此这里建议你只使用两个内建的,,即db_securityadmin和db_owner。其他内建,例如db_datareader,它授予对数据库里面所有对象的SELECT权限。  
虽然你可以用db_datareader角色授予SELECT权限,然后有选择地对个别用户或组拒绝SELECT权限,但使用这种方法时,你可能忘记为某些用户或者对象设置权限。一种更简单、更直接而且不容易出现错误的方法是为这些特殊的用户创建一个用户定义的角色,然后只把那些用户访问对象所需要的权限授予这个用户定义的角色。  
SQLServer安全规划全攻略简化安全管理
SQL Server验证的登录不仅能够方便地实现,而且与NT验证的登录相比,它更容易编写到应用程序里。但是,如果用户的数量超过25,或者服务器数量在一个以上,或者每个用户都可以访问一个以上的数据库,或者数据库有多个管理员,SQL Server验证的登录不容易管理。
由于SQL Server没有显示用户有效权限的工具,要记忆每个用户具有哪些权限以及他们为何要得到这些权限就更加困难。即使对于一个还要担负其他责任的小型系统,简化也有助于减轻问题的复杂程度。因此,首选的方法应该是使用NT验证的登录,然后通过一些精心选择的和管理数据库访问。
下面是一些简化安全策略的经验规则:
·用户通过SQL Server Users组获得服务器访问,通过DB_Name Users组获得数据库访问。
·用户通过加入获得权限,而全局组通过加入角色获得权限,角色直接拥有数据库里的权限。
·需要多种权限的用户通过加入多个的方式获得权限。
企业信用信息

我要回帖

更多关于 our servers are 的文章

 

随机推荐