版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在机密数据库中使用sql server 2005实现行级别和单元级别的安全sql server 技术文章作者: art rask, don rubin, and bill neumann发布: 四月 2005更新: 九月 2005适用于: sql server 2005摘要:本文描述了sql server 2005如何被用于支持行级别和单元级别 安全 (rls/cls)。这篇白皮书中提供了rls和cls 是如何被用于机密数据库安全需求的示例。版权这是一份初版文件,可能会于本软件产品正式发行之前依实况进行必要的修订。本文件中所包含的信息代表 microsoft corporation 于发行日前
2、针对该问题的观点。由于 microsoft 必须反应市场条件的变更,因此不应解释为 microsoft 的承诺。在发行日之后,microsoft 不保证文件中任何信息的正确性。此白皮书仅供参考使用。microsoft 对于本文件中各项信息,不作任何明示、暗示或法定的保证。使用者必须遵守所有适用的版权法律规定。在不影响版权各项权利的情况下,若无 microsoft corporation 的明确书面许可,本文件中的任何部份均不得因任何目的,以各种可能的形式或方式 (电子、机械、影印、录制或其它方式) 进行复制、储存或导入至检索系统或传送。 本文件中可能述及 microsoft 的专利、专利应用程
3、序、商标、版权或其它智能财产权。除非取得 microsoft 明确书面授权声明,否则本文件并未授予这些专利、商标、版权或其它智能财产的授权。除非另有说明,本文档中用作示例的公司、组织、产品、域名、电子邮件地址、徽标、人员、地点和事件均是虚构的,并不是有意或者不应推断为与任何真实的公司、组织、产品、域名、电子邮件地址、徽标、人员、地点或事件有关联。 2005 microsoft corporation。保留所有权利。microsoft ,visual c# 和windows是 microsoft corporation 在美国和/或其它国家/地区的注册商标或商标。本文档中提到的真实公司和产品的名
4、称均是各自所有者的商标。内容列表执行摘要1设想并设计原则1fine-grained 访问控制1安全标签的简要回顾2术语3为实现行级别和单元级别访问控制的安全标签5数据库解决方案概览5行级别安全6定义标签架构6角色8我能看到什么?8改变基本表11定义视图12插入、更新和删除12外部密钥14结合在一起(部分1)14单元级别安全14sql server中的加密15密钥访问控制17改变基本表18定义视图18插入/更新时加密单元数据19物理分割19结合在一起(部分2)19性能20行级别泄漏21评估顺序21缓解22table-valued功能22加密23应用程序错误管理24缓解摘要24摘要24附录 a i
5、nstead of 触发器实例25附录 b 对称密钥加密选项27结论28执行摘要本文回顾了行级别和单元级别的基于标签的安全需求。本文介绍了基于microsoft sql server2005提供的在安全标签和视图上行级别安全的设计。额外的允许单元级别安全的设计也会被介绍。单元级别 安全也同样受到安全标签的控制。设想并设计原则本文的描述方法使得使用数据库应用程序的设想结构同每一位最终用户相关联。这既能被用于windows集成身份验证也能用于sql server身份验证。这就排除了为一个单身份而产生的中间连接池的作用,这就是通常用于可测量和管理的好处。然而,系统是需要审核和有其它安全需求的,正好证
6、明了行级别安全标签与审核需求是有关联的,在所有数据库连接时需要用户身份,因此,连接池通常不是一个选项。 这种设计同样能指导以下这些原则:1. 依靠sql server和microsoft windows 安全模型,避免循环验证体系。2. 保持简单。在一些普通场景下,大量可能的安全标签被结合在一起变的非常大。应避免在仍然允许很多fine-grained 控制的数据时fine-grained 安全组的增长。3. 这种设计用来衡量很大的上千万行数据库。通常,目的是对用户帐户限制访问被管理员所管理的数据。这种设计不能利用行级别或 单元级别 安全来影响管理员,特别是 sysadmin 或 db_owne
7、r 的成员。拥有权力的用户总是能够访问存储在所有数据库中的数据。fine-grained 访问控制基于用户权限的访问控制信息是很多计算机软件的基本原则。microsoft windows,例如,用访问控制列表 (acls)来控制用户访问ntfs文件系统上的文件和文件夹。microsoft sql server 强制访问控制服务器登录、数据库及数据库中的对象(例如表)。在有些情况下,信息访问控制级别会扩展到特定的级别。windows可以控制访问用户文件,但不能控制访问用户文件的各个部分。sql server2000,像其它的rdbmss,能够控制访问表,但不能对表提供行级别或 单元级别的安全。在
8、一些情况下,需要进行更细级别的访问控制。例如,一个病人和诊断的力表,可能被存储在一个单独的文件或表中。任何医生只能被允许视图自己相关病人的信息。在这种情况下,仅仅对文件设置一个acl或执行对表一个grant/deny select 即可,不会遇到商业需求。类似的情况在很多环境下都存在,包括金融、法律、政府和军事应用上。消费者秘密的需求是另一个驱动所控制的数据。这种典型的数据库需求的方法是通过必要的逻辑程序代码来实现的。应用程序的商务逻辑层被过滤了,例如,在客户端服务器类型的应用程序,客户端可能需要。对应用程序而言,这种方法是很有效的,但数据事实上是不安全的。一个用户通过microsoft ac
9、cess 或一个sql查询工具连接到后台服务器,他拥有了select的权限就能够无限制地访问表中的所有行。另外一个通常的能够减轻上面问题的方法,是在存储程序中限制所有数据的访问。用户对潜在的表被拒绝了所有的权限,并且在执行了逻辑过滤的存储程序上授予执行权限。这种方法也有自身的缺点。例如,广告公司用户报告数据库是非常困难的。什么是对用户帐户自动应用逻辑过滤需来呈现真实表(或视图)的需要呢?这种情况下,所有用户都能够访问病人表,但是对每个用户来说,select * from patient只会返回用户能看到的数据。在介绍基于sql server2005对这个问题的解决方案之前,我们先介绍安全标签,
10、和一个普通的示例来定义对数据的fine-grained访问控制。安全标签的简要回顾安全标签是描述敏感数据项(一个对象)的信息。是一个包括一个或多个种类记号的字符串。用户(主题)有权限来描述相同的记号。每个主题都有自己的标签。主题的标签被用来同另外访问对象的标签进行对比。例如,以下表的片断有对安全标签的注解行。表 1idnameclassification1john doesecret2frank jonestop secret3sam barnesunclassified一个系统包括有表2中所示用户帐户的数据。表 2 idclearancealicesecretbobunclassified
11、(no clearance)每个用户的清除选项(作为安全标签)决定了他们能够访问哪一行。如果alice对这张表输入select * from ,她能够得到以下结果。表 3idnameclassification1john doesecret3sam barnesunclassified如果bob输入select * from ,他能够看到如表4中的不同结果。表 4idnameclassification3sam barnesunclassified访问控制能够得到比这更为复杂的结果。能够有更多的安全标签访问标准。例如,除了分级之外,一部分数据能够只对特定项目团队的成员可见。假设项目组叫做pro
12、ject q,并且考虑以下例子。表 5idnameclassification1john doesecret, project q2frank jonestop secret3sam barnesunclassified让我们来更改我们用户的权限。表 6 idclassificationalicesecret, project qbobunclassified (no clearance)charlietop secret我们添加了charlie,并赋予了清除值为top secret。我们将 alice的标签加上project q 标记。现在,如果alice输入 select * from ,
13、她能够看到表7所示结果。表 7idnameclassification1john doesecret, project q3sam barnesunclassified如果 charlie 输入 select * from ,他能够看到如下结果。表 8idnameclassification2frank jonestop secret3sam barnesunclassified尽管charlie有top secret的清除值,但是他没有 project q 的标记,所以他不能看到第一行。alice既有secret 标记,也有projectq 标记,所以她能够看到第一行。第二行需要top se
14、cret的清除值,因此只对charlie是可见的。这种基本的方法能够被扩展到额外的标记。在一些世界范围的情况中,安全标签能够包括不同种类的一些标记,并且很多标签结合能够变得非常巨大。术语这部分介绍正确描述标签的术语以及标签的对比。一个标签是描述对象敏感性或其它主题权限的字符。标签是标记的集合。每个标记描述了一个特殊的权限。标签中的标记来自一个或多个种类。表9 显示了之前例子的详细分类。表 9labelmarkingscategoriessecret, project qsecretclassificationproject qproject team如果主题标签支配对象标签,那么这个主题就能够
15、被该对象所访问。给予两个标签, a 和b,如果标签b的每个种类都与标签a的标记相适合,那么标签a 被认为支配标签b。决定标记是否适合要依靠每个种类的属性。为了我们的目的,每个种类能够被表现为以下属性。表 10属性描述domain在种类中可能的标记。hierarchical (yes or no)种类是否是分等级的。分等级的种类数值的排序。这种排序决定了访问。在等级中,一个标记能够适合任何与之相同或低于它的标记。不分等级的系统没有数值的排序。一个标记可能出现或不出现。cardinality在域中多少值能够被应用到对象上。comparison rule主题必需有任何或所有的标记应用到这个等级的对象
16、上(作为任何和全部的对比规则)。一个可选择的规则,相反的规则能够被使用。这种规则需要每个对象有为了访问设定的所有标记。这有一些例子进行说明。假设我们有一个两个种类的安全标签架构,如表11所示。表 11categorydomainhierarchicalcardinalitycomparison ruleclassificationtop secretsecretconfidentialunclassifiedyes1.1(exactly one)anycompartmentqbngkno0.*(0, 1, or many)all现在让我们看看标签的例子。在每个情况下,问题是:标签a能支配标签b
17、么?例子 1标签 asecret,q标签 bsecret,q,g比较这些标签,我们必须比较每个种类中的标记。 分级: 在标签a中secret标记适合标签b 中secret标记。 间隔: 标签a中的q 间隔不适合标签b中的q,g间隔,b上所有的间隔必须在a中出现。因此,标签a不能支配标签b。例子 2标签 atop secret,q,g,bn标签 bconfidential,q,g 分级:标签a中的top secret标记适合标签b中的confidential标记。 间隔:标签a中的 q,g,bn间隔适合标签b中的 q,g 间隔,所有标签b中的价格在a中均出现。因此,标签a支配标签b。例子3标签a
18、secret,q,k标签 bconfidential 分级:标签a中的secret标记适合标签b中的confidential标记。 间隔:标签b没有间隔,这就意味这没有间隔需求。因此,标签a支配标签b。为实现行级别和单元级别访问控制的安全标签安全标签可以被应用于很多环境中,不论公共还是私有部门。多级安全 (mls)信息管理区域(一个管理多敏感级别信息的系统)从19世纪70年代开始发展起来。所以,以对数据和用户定义权限为范例的基于安全标签的设计出现了。数据库解决方案概览下面会详细讨论对sql server2005数据库添加基于标签和行级别和单元级别 安全的设计方案。这种设计定位于任何标签架构并且
19、强制使用必须使用sql server2005执行。 这种设计包括: 添加结构来定义标签种类和标记。 允许用户的标签通过基本标记的成员角色来直接进行定义(例如, top secret, confidential; usa, uk, taskforce z)。 为 write-up, write-down,和其它控制模型提供写入数据。 在数据库中,能够进行可选择的加密来提供单元级别 安全,在 sql server2005中使用了内部的,半管理的证书存储。 提供固定的指导方针,开发人员或管理人员能够开发自动执行基本输入选择的工具。 通过混合多种行级别安全解决方案,提供能够保护行级别安全弱点的策略。行
20、级别安全在sql server视图中,我们用于强制行级别的机制。视图允许用户预先设定的查询执行。同样,用户能够访问这个视图,但是被拒绝访问下面的表。 这就防止了用户通过视图间接访问到基本表。我们使用特殊方式构造应用到所有使用必要的逻辑、基于表的强制行级别安全的视图。在一些情况下,视图被用于预先设置的复杂的查询,以使得能够简单地查询报告单一的数据库对象。我们不能做这些。我们的目的是通过同样的定义简化基本表的视图。用户(或应用程序)将查询或更新这些视图,就像是自身的表一样,并将其加入到其它表中。访问基本表将会被拒绝。 建立这些视图需要我们做以下四件事:1. 建立一些定义了标签种类和标记的表,并对每
21、一个安全标签赋值。这项操作只需要对每个数据库作一次。2. 为记号值建立角色。在这个角色中的所有成员会被樱桃指派给用户的标签。这项操作只需要对每个数据库作一次。3. 对基本表做一些更改。4. 定义视图。定义标签架构我们通过建立少量的定义了元数据的表来开始。这些显示在图1的er 图表中。tblcategory 表标签包含的种类。对每个种类,有一些可能的值作为种类的域。这些被定义在tblmarking 表中。如果是分等级的种类,有关父子关系的记录被定义在 tblmarkinghierarchy 表中。在这些表中的列基于早期安全标签级别的讨论而不被加以说明。图 1下面的sql语句展示了(概括地)我们如
22、何设置一个标签架构示例。-categoriesinsert tblcategory (id, name, comparerule, defaultrole) values (1, classification, any, null)insert tblcategory (id, name, comparerule, defaultrole) values (2, compartment, all, public)insert tblcategory (id, name, comparerule, defaultrole) values (3, nationality, any, public)
23、insert tblcategory (id, name, comparerule, defaultrole) values (4, need-to-know, any, public)go-classification markingsinsert tblmarking (categoryid, markingrolename, markingstring,) values (1, t, t)insert tblmarking (categoryid, markingrolename, markingstring) values (1, s, s)insert tblmarking (cat
24、egoryid, markingrolename, markingstring) values (1, c, c)insert tblmarking (categoryid, markingrolename, markingstring) values (1, u, u)-classification hierarchyinsert tblmarkinghierarchy (parentcategoryid, parentmarkingrolename, childcategoryid, childmarkingrolename) values (1, t, 1, s)insert tblma
25、rkinghierarchy (parentcategoryid, parentmarkingrolename, childcategoryid, childmarkingrolename) values (1, s, 1, c)insert tblmarkinghierarchy (parentcategoryid, parentmarkingrolename, childcategoryid, childmarkingrolename) values (1, c, 1, u)-compartment markingsinsert tblmarking (categoryid, rolena
26、me, markingstring) values (2, q, q)insert tblmarking (categoryid, rolename, markingstring) values (2, g, g)insert tblmarking (categoryid, rolename, markingstring) select 2, defaultrole, none from tblcategory where id = 2etc.接下来让我们关注tbluniquelabel表。这张表被用于绘制对于唯一的id的标记与特殊的安全标签实例的结合。由于效率的缘故,这张表根据需要被定制。一
27、部分数据及其安全标签被添加到数据库中,被称作获取id的存储进程会表现这些唯一的安全标签。如果在tbluniquelabel 里没有相应的行,就会添加新的行并返回新的id。我们想要在这张表中正好有我们需要的行,不多也不少。最后, tbluniquelabelmarking 表结合了单独的标记值和安全标签。角色定义标签架构,需要对sql server安全模型进行一些操作。为我们定义的每个种类中的标签,建立相应的数据库角色 如果在sql登录时使用windows集成身份验证映射一个windows用户帐户,那么windows组也是可用的。这个应用会在这篇白皮书的数据库角色章节中讨论。数据库角色必须坚持以
28、下指导方针。 为可以使用任何或全部比较规则的不分等级的种类,为每个可能值建立一个角色。为了这些标记,角色的名字必须在tblmarking.markingrolename 值中标出。 为分等级的种类,需要做相同的事。另外,角色必须被嵌套到分等级模型当中。对建立的每个角色,加入在表tblmarkinghierarchy 中定义的父角色作为一个成员。这种嵌套,例如,有secret 清除选项的用户,能够访问该级别及以下级别的数据。这些角色允许用户能够被赋予正好能够访问数据的安全标签的权限。这就是程序或数据库管理员(dba)在用户系统中所应有的角色。 在下部分,我们将看到角色成员是如何被识别,以确定他们
29、能够访问那些数据的。我能看到什么?在我们关心这些应用程序表之前,我们先建立一个集成了真正行级别安全逻辑的帮助视图。我们称之为vwvisiblelabels。定义起始点视图如下面代码所示。select id, label.tostring() from tbluniquelabel with (nolock)where .where语句定义了我们标签架构中的基于种类属性。最重要的属性是比较规则。为每个有任何对比规则的种类,添加以下语句到where语句中。id in (select id from tbluniquelabelmarking with (nolock) where category
30、id = and is_member(markingrolename) = 1)这条语句给了所有id唯一的安全标签,包含了当前用户成员身份种类的标记。让我们更详细的看一下,提交查询扫描tbluniquelabelmarking 表种类中的行。从这些行当中,选择了作为markingrolename数据库角色成员中当前的一个用户。这些检查通过sql server内置更能is_member 来完成。对这些行中的每一行,在tbluniquelabel 中相应记录的id都会被返回到外部查询。那么比较规则为全部的种类如何呢?添加以下语句到where语句中。添加以下语句到where语句中。1 = all(s
31、elect is_member(markingrolename) from tbluniquelabelmarking (nolock) where categoryid = and uniquelabelid = tbluniquelabel.id)这些语句的结果是需要用户拥有全部为了访问的应用标记。提交查询通过is_member对每个在tbluniquelabel 给出的相关标记返回一个值的列表。如果所有返回值都为1,这些语句适合。比较规则为完全相反的种类,应该在where 语句中使用如下语句:id in (select keymappingid from tbluniquelabelma
32、rking(nolock) z where not exists (select markingrolename from tblmarking where is_member(markingrolename) = 1 and categoryid = 1 and internallygenerated =0 except select markingrolename from tbluniquelabelmarking where categoryid = 1 and keymappingid = z.keymappingid)所有语句加入,使得到他们中有一个and操作者。结合所有我们之前的
33、例子,你就会得到媒体视图的定义,如下所示:create view vwvisiblelabelsasselect id, label.tostring() from tbluniquelabel with (nolock)whereid in -classification(select id from tbluniquelabelmarking with (nolock) where categoryid = 1 and is_member(markingrolename) = 1)and -compartments1 = all(select is_member(markingrolena
34、me) from tbluniquelabelmarkingwhere categoryid = 2 and uniquelabelid = tbluniquelabel.id)go这个视图被称作vwvisiblelabels,但不能这么认为“这张列表显示了在数据库中所有我(当前用户)能访问的安全标签”。表12 总结了依靠每个种类中属性,设置标签架构的设计规则。表 12category attributedesign implicationdomain在tblcategory, tblmarking,和tblmarkinghierarchy 表中定义所有标签。建立一个数据库角色来表现每个标记,
35、为分等级种类使用规则嵌套。角色中的成员能够访问。hierarchicalyes分级模型中嵌套角色no无操作cardinality1强制标签上的标记数字使用触发器。视为 comparison rule 为any。1.*无操作0.1 or0.*同上,但将0标记作为nomarkingbehavior表中的描述。comparison ruleany在vwvisiblelabels视图中使用下列where语句片断 id in (select keymappingid from tbluniquelabelmarking with (nolock)where categoryid = n and is_m
36、ember(markingrolename) = 1)all在vwvisiblelabels视图中使用下列where语句片断1 = all(select is_member(markingrolename) from tbluniquelabelmarking (nolock) where categoryid = n and keymappingid = tbluniquelabel.id)inverse all在vwvisiblelabels视图中使用下列where语句片断id in (select keymappingid from tbluniquelabelmarking(noloc
37、k) z where not exists (select markingrolename from tblmarking where is_member(markingrolename) = 1 and categoryid = 1 and internallygenerated =0 except select markingrolename from tbluniquelabelmarking where categoryid = 1 and keymappingid = z.keymappingid)nomarkingbehaviorno restriction为每个种类中有0标记的
38、tbluniquelabel ,在表中tbluniquelabelmarking加入一行来指派公共角色。使得对表而言不限制种类。 noaccess如果 comparison rule 是 all,在vwvisiblelabels视图中使用下列where语句片断exists(select markingrolenamefrom tbluniquelabelmarking (nolock) where categoryid = n and uniquelabelid = tbluniquelabel.id)如果 comparison rule 是 inverseall,添加如下代码exists(s
39、elect markingrolename from tblmarking where is_member(markingrolename) = 1 and categoryid = 1 and internallygenerated = 0)注意处理一些场景时,有一个额外的属性叫做nomarkingbehavior。它控制着不带种类标记的访问评估。在多数场景中,没有标记意味着种类能够被忽视。在一些场景中,种类中缺省的标记意味着无人能够访问这些数据(除了通过rls为帐户赋予了明确的权限)。改变基本表现在来看一下被用于到添加了行级别安全的基本表的改变。这些改变是次要的(在我们得到单元级别安全标题
40、是会更多) 两列必须被添加到基本表中: rowlabel 和 rlsmappingid。 rowlabel对这行来说是没有赋值的安全标签 。 rlsmappingid 是从相应安全标签tbluniquelabel 得到的整型id。严格地说,只有rlsmappingid 是必需的。事实上,有rowlabel 列是违反标准格式的。在严格的安全场景下,在数据进入数据库时,通常需要安全标签同数据保持在一起。因此,在基本表中有rowlabel。 可能为了其它行的元数据要加入很多必要的列。无论特殊应用程序的策略是什么样的,都应该知道在基本表中rlsmappingid 是必需的。当一行及其安全标签被插入到一
41、张基本表时,响应这张表的rlsmappingid 必需被返回(或生成),并且被放置在新行中的rlsmappingid 列。同样地,如果一行被更新,导致安全标签被改变,那么 rlsmappingid 也会相应地改变。(安全标签的更新是根据每个场景的安全需要进行的;这是能够被禁止的)。最终,在基本表rlsmappingid和rlsmappingid列上建立了一个外部密钥关联。由于性能原因,可以在rlsmappingid列上建立一串索引。不要跳过这步,否则会影响性能!定义视图我们准备好了上一步操作。接下来将在基本表上建立一个视图,本质上说,在用户和应用程序看来是取代了这张表。这里就是视图的定义。cr
42、eate view usertableasselect from tblbasetable (readcommtted), vwvisiblelabelswhere tblbasetable.rlsmappingid = vwvisiblelabels.idgogrant select on usertable to deny all on tblbasetable to go以下有两部分视图的视图的定义: 通过在基本表上对可见标签视图加入安全标签识别符,这个标签需要依靠用户在安全组成员身份来对行控制访问基本表的优势就体现出来了。 readcommitted锁应用到基本表上以防止恶意读取基本表
43、的数据。这就防止了未经处理的用户视图行中敏感数据的内容,但是那些安全标签标识符没有被改变。这种锁定视图不考虑读取转换隔离级别或在查询视图时所用的外在锁。repeatable read 和 serializable 在这里是同样可以被接受的。注意这种其它用户(更新者)有转换隔离级别除了read uncommitted的假设。我们现在有一个明显强制的基于标签的行级别安全视图,而没有任何程序逻辑,并且一直起效,即使应用程序层迂回访问。当然,这种视图仅仅对从表中选择数据有好处。如果应用程序必需在表中插入、更新过删除行,这就只有很少的工作要做。插入、更新和删除迄今为止来讨论任何从根本表中选择行。很多应用
44、程序需要在表中写入信息,插入、更新或删除基于标签的行级别安全的表中的行,带来了一些问题。哪一行能够被用户更新?是否是任何限制安全标签阻止用户在行中插入新的内容? 要根据不同场景来回答这些问题。一些系统只允许 “read-down, write-down” 的行为,而其它系统只允许 “read-down, write-up”的行为。这些场景都能被支持,而且使用了很多相同的技术。来支持插入和更新基本表内容,我们需要能够做以下这些事情: 允许插入或更新用户可能的视图。 需要正确的行标签。 需要生成新的标签来映射id,或解决已存在id的标签。 为一些场景的需要,强制write-down 或write-
45、up逻辑。 完成插入/更新基本表。这是通过定义为插入和更新定义instead of 触发器而完成的。这些触发器检查合法的标签,生成或重新找回映射id的标签,强制写权限检查,并且完成事实的对基本表的插入或更新。instead of 触发器的例子在附录a中显示,这有一些指出这些的代码。首先,视图以下两行代码。declare rowclassification securitylabelselect rowclassification = row_label from inserted可以得到一些包括insert语句的行标签,被称之为用户定义的securitylabel 。securitylabel
46、 集成了弥补特殊标签的值。securitylabel 能够同dominates功能相比较, 一个microsoft visualc# 用户定义的功能。这种方式比较了两种标签来看适合一个可以支配另一个。我们用在触发器中的这种方式来比较当前用户对他们感兴趣的数据安全标签的权限。在比较之前,我们必须得到一个描述当前用户权限的securitylabel 实例。下面的代码做了这件事。execute as callerselect callername = current_userrevert declare userclearance securitylabelexec usp_getuserlabel
47、 callername, userclearance outputusp_getuserlabel 是一个检查当前用户角色成员的存储进程,并且生成一个标签来描述他们的权限级别。这个标签返回一个securitylabel 实例。我们想能够比较的任何用户权限标签。在我们例子的这种情况下,我们执行了write-down-only的需求,如下所示。 if dbo.dominates(userclearance, rowclassification) = 0raiserror(user rights not sufficient to write this data, 12, 1)相似的代码能够被用于强
48、制write-up 需求。(做为选择,如果需要数据标签插入用户的清除级别,我们能够跳过dominates 检查并且简化从usp_getuserlabel 返回的标签。假设用户有适当的写入数据的权限,我们需要为行标签获取映射id。usp_getrlsmappingid 存储进程来执行这项工作。这个程序执行了必须重新找回id或生成新的id的工作。用过映射id,我们能够执行真正的插入基本表的操作。更改或删除触发器的代码通常使用了相似的逻辑。 外部密钥在离开行级别安全主题之前,我们应该定位使用rls保护表功能的问题。允许用户查看表中在另一张表中受限制的的行,会带来信息的泄露。这能够定位什么时间修改了基
49、本表。当添加了 rlsmappingid时,这一列被添加到主密钥中。只要主密钥在另一张表中被提及,行级别控制就会产生,并且被用于查看整张表的定义。.结合在一起(部分1)为了得到由基于标签的行级别安全的存在的表,不同的设计方式现在被结合在一个分层的设计模式中。图2描述了这个图形。底层是基本表自己。在基本表之上,我们为读取表建立了强制行级别安全的视图。这就需要支持旁边图表中的信息。在rls视图之上。建立了一个外部视图。这个外部视图选择了直接第一个视图。这个视图也包含instead of 触发器来支持在表中插入、更新和删除。不是必需分开这两个视图,但是我们添加单元级别 安全在这个模型上是必要的。图
50、2只有最主要的视图和vwvisiblelabels 视图(在上图中阴影部分)被表现为用户登录。这种分层设计有以下这些优点: 改变了主要设计点,使得更为简化和容易维持。 这种应用方法为表设计了固定的程式化的程序。 为了写入核心结构,集成了安全标签逻辑,而优于应用程序代码和存储程序。在下面章节中,我们改善了这种方式,包括单元级别 标签和不同敏感程度访问特定的i/o设备的物理区域数据。单元级别安全数据被控制在很好的细致级别上,而不是全部行上是完全有可能的。多数行可能需要对一个用户设置是可见的,当确定的更为敏感的单元可能需要附加权限才能视图。图3中显示了这种概念。不同图案描绘了不同应用到数据上的标签。
51、当倒数第二行被行级别安全所控制时,有很多单元格分散穿过这张表,并且有它们自己特定的标签。图 3我们应该基于我们的权限来能够控制这些数据,更接近数据自身的可能。理想地,数据库能够从单元标签中简化显示数据,基于统一的连接用户身份。直到现在仍然不能很容易地支持这种模型。sql server2005 引入了在自身的数据库引擎中加密的功能。通过使用被数据库所管理的内部证书或密钥结构,这能够被用于加密和解密任意的数据。而不需要借助外部的证书或密钥来执行。 本文提出了完成理想的单元级别控制的设计,并且能够很容易地被执行和管理。基本的设计目的是: 支持数据单元的任意标签。 动态评估用户的标签,只显示适合的单元
52、。 大量卷有能够接受的性能。sql server中的加密sql server 提供了内置的容易的加密和解密数据的功能,是通过证书、不对称密钥或对称密钥来实现的。管理了内部所有的证书存储。这些存储使用了分层次的加密,安全证书和密钥在一个级别层次之上。这些sql server2005 的特性被称之为secret storage。图 4 资源: sql server 2005 测试版2 在线书籍通过内部api实现的最快的加密模式是堆成密钥加密。这种模式适合处理大量的数据。对称加密密钥通过x509.v3证书被加密存储。sql server2005 支持一些对称加密的算法。这些算法在windows cr
53、ypto api中被执行。 附录b 列出了支持的算法和每种算法的密钥长度。在数据库连接区域中,sql server2005 能够保持多种开放式对称密钥。通过“解开”,密钥 被从存储中重新得到,并被准备好了用于加密数据。当一部分数据被加密时,不需要指定使用对称密钥,取而代之的是,如果当前密钥被解密和解开了,这些加密字节引擎自动流向解开的对称密钥。这个密钥被用于解密和还原数据。如果当前密钥是不解开的,则返回值为空。“解开”密钥的能力需要直接访问密钥上的访问控制列表acl。 给予sql server2005 这种加密机制的支持,有以下几种方法。 1. 为每个特定的在数据库中被用于标记数据的表建立一个
54、对称密钥。2. 通过相应的密钥在标签单元中加密数据。 3. 通过被解开用户标签的映射标签的密钥来控制访问密钥。提供了简单的在建立连接时解开所有密钥的方法。4. 使用在基本表上的视图,包括在select语句中调用加密api来定义这个视图。以下有一个简单的例子来显示如何定义这个视图。create view mytableasselect id,decryptbykey(sensitivedata),decryptbykey(othersensitivedata),nonsensitivedata,from basetablego给出了这种方法,让我们看看在用户选择了这个视图时发生了什么。被映射到标签的用户能够访问的所有密钥都被解开了。因此,带有标签的所有单元在select 语句被执行的时候都将会被解密。相反地,被映射到标签的用户不能够访问的所有密钥将不会被解开。当select语句被执行的时候,带有这些标签的单元返回空值,不会为用户提供任何在单元中的数据信息。 这种方法完成了细节,动态控制了我们查询的相关表中的数据。密钥访问控制当然这种密钥的控制设计是非常适合的。sql server2005 根据一个单独的sql server 规则定义了密钥上的权限。解开密钥的权限,例如,能够被赋予用户bob或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园小班打击乐《小兔和狼》课件
- 西华师范大学《设计素描》2021-2022学年第一学期期末试卷
- 《中外历史纲要》(上)周考测试题-第5课-三国两晋南北朝的政权更迭与民族交融-(试卷)
- 挂靠合同范本
- 房管局二手房网签合同范例
- 2025届高考地理二轮复习第1部分专题10区域资源开发与生态环境建设训练含解析新人教版
- 手写合同范例
- 承包职工餐厅合同范例
- 建筑代工合同模板
- 出租消防合同范例
- 色谱柱Agilent安捷伦化色谱柱介绍
- 电气设备防潮技术措施规程范本
- 不动产登记表.doc
- 医疗器械生产场地的相关要求
- 《产品合格证》(通用格式模板)
- 电梯控制器DP30使用手册应用篇
- (完整版)塔吊基础专项施工方案(专家论证)
- 测绘专业职称考试中级复习资料
- 外汇与汇率教学课件PPT
- 施工现场区域特点和规定
- 1765号文具体计价范围和计算方法
评论
0/150
提交评论