SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引
对Analysis Services Cube而言,安全,是一个非常重要的问题。在某种形式的安全要求下,Cube中的数据可能会非常敏感。例如,如果一个Cube包含整个公司的销售数 据,我们可能需要确保每个销售人员只能查看他或她自己的数据。同样,如果一个Cube包含有关公司盈利能力数据,可能我们需要谨慎使用,以确保只有财务部 和董事会有权访问它。
在本系列中,我们将讨论Analysis Services(以下简称AS,邀月注)的安全模式,探索不同的方式来使用它,并追求最佳实践。
一、示例安全前提
假设我们正在为一家跨国公司建设一个BI解决方案,我们希望我们所有的员工和合作伙伴公司可以访问我们的Cube,条件如下:
1、按国家来访问,比如加拿大的用户只能访问加拿大的数据,英国的用户只能访问英国的数据,依此类推。
2、按代理商访问,某代理商只能访问自己公司的销售信息。
3、限制对特定度量的访问,包括Real和calculated。
在现实世界中,这些限制应该在Cube创建前就已经定义好。
二、Analysis Services安全功能
AS提供了一套丰富的安全功能,使我们能够控制用户可以与一个cube交互的每一个细节。在本节中,我们将描述如何AS实际是是如何安全工作的,以及将不同类型的权限,授予用户。
1、角色和角色成员资格
AS使用角色来管理安全。角色是一个安全组,用户必须是访问多维数据集的一个或多个角色的成员。我们可以授予一个角色有权访问任何cube对象或执行任何管理任务。
基于我们的要求,我们需要创建几个角色。我们需要创建安全的国家的角色,所以我们有一个法国用户的角色只允许访问数据来自法国,加拿大的用户,只授予访 问加拿大的数据,等等。同样,我们也需要有为每个经销商提供访问Cube的角色。当然,这可能意味着,我们最终有大量不同的角色。稍后在本系列中,我们将 展示如何使用一个角色,来处理许多不同权限集。
AS使用角色来定义安全性,但一个角色,从安全模式的观点,仅仅是一个容器。安全只有当我们将用户添加到一个角色才起作用。因此,我们需要知道什么样的用户,可以添加到一个角色。答案是,只允许访问通过角色的Cube用户是Windows用户。
如果你熟悉其他微软产品,如Internet信息服务或SQL Server本身,你就会知道,他们提供了几种不同的方法对用户进行身份验证:Windows集成安全性始终是一个选项,但这些产品往往执行一些其他形式的身份验证。这并不适合于AS,它只支持Windows集成安全性,而不支持任何其他形式认证。
当我们谈到“Windows用户”的时候,我们指的是两个域用户和来自安装AS的服务器上的本地用户。本地用户经常使用的多维数据集时,是在互联网上访问。在这种情况下,将有可能是一个DMZ(De Militarized Zone)中的Analysis Services服务器,有一个Cube的副本合作网络的的某处被其他AS服务器处理,既然DMZ中的服务器不属于某个域,我们将需要使用本地用户才能访问它。
如果不想捆绑安全到指定的Windows用户,我们可以限制AS角色的成员关系到Windows用户组(更完美的是域用户组),这绝对是一个好主意。然后,我们可以通过添加和删除Windows用户到组以控制访问Cube。
因此,为了让用户访问多维数据集和强化安全,我们需要:
1、定义AS的角色,每个角色里的所有用户都拥有一整套权限集。
2、定义域组,并把它们添加到角色。为清晰起见,我们应该在AS角色和域组使用相同的名称。
3、增加域用户到这些组。
如果用户能够访问使用Windows集成安全的Cube,那么这将行之有效。然而有很多的情况下,集成的安全性不能使用,比如防火墙保护的服
务器或其他类型的网络基础设施阻止集成安全。在这些情况下,我们将需要使用IIS,让用户通过HTTP连接到Cube,我们将介绍如何做到这一点,在本系
列的后面。
2、安全对象
AS数据库可以使用的安全对象包括:
(1)Data Sources
(2)Cubes
(3)Dimensions
(4)Cells
显然,不同的安全对象,我们可以设置不同的权限。例如,我们可以授予在Cube级别权限执行钻取查询,而这对一个特定的维度没有任何意义。
下面是安全对象可以被授权的基本类型:
管理权限相对简单,并允许用户执行如处理一个Cube这样的任务。数据安全是更为复杂,它控制角色如何访问Cube数据;正因为如此,我们将花费更多的时间讨论数据安全及它如何实施。
3、创建角色
创建角色很简单,在BIDS解决方案列表下,选Role节点,选“new Role”即可。
4、多个角色的成员资格
用户可以属于多个角色,所以我们需要了解一个用户拥有多个角色的成员时会发生什么。
如果您参与过Windows中的安全工作,那么你可能会知道“deny wins over grant”的规则。这意味着,如果一个用户属于一个组,可以实现对资源的访问,但同时,该用户属于第二个组,该组被明确拒绝访问该资源,那么用户将无法访问该资源,因为在第二组中否认>第一组的授予。
在AS中没有这样的规则。当一个用户是多个角色的成员,该用户将拥有他们在每一个角色所有的权限的并集。例如,如果一个用户属于一个角色,只能看到加拿 大和其他任何一个国家,另一个角色,只能看到法国的数据资料,该用户将能够看到加拿大和法国的数据。同样,如果一个开发人员给予他们充分的管理权限,那么 这将保证他们能够执行所有管理任务和看到所有cube的所有数据,即使他们也是受限角色的成员。这可能似乎奇怪,但是,不管我们喜欢与否,这是AS的安全 性工作方式。
4、测试角色
如果作为开发人员,可以有充分的管理权限,那么我们需要一种方法模拟,使我们可以测试更严格的角色是否正确启用。有三个途径:
(1)连接AS数据库的Cube时,我们可以设置以下两个连接字符串属性,连接字符串属性可以在SSMS中附加的连接属性连接对话框中的选项卡设置。
(2)在BIDS中,双击Cube,右边展开的Browser选项卡,选择“Change User”
(3)对客户端工具(比如Excel)使用”Run as”命令。
5、管理安全
AS中管理权限可被授予两个等级:服务器级别和数据库级别。要成为一个AS服务器管理员,用户必须是一个特殊的角色--全服务器管理员(server-wide Administrators)的成员。在AS安装时,用户可以被添加到这个角色时。服务器管理员有没有限制,同时,某些任务,如创建数据库,只能由服务器管理员。因此,要开发Cube,我们就必须是这个角色的成员。
数据库级别的管理权限授予数据库角色,我们刚刚在前面几节介绍。我们可以通过检查“常规(General)”选项卡上的“完全控制(Full Control)”框中的功能将所有管理权限授予到数据库中。这意味着角色的成员可以创建新的对象,编辑现有对象,处理对象等。万一我们需要更精细颗粒度控制管理权限,可以授予以下两个对整个数据库或单个对象的权限:
(1)阅读定义(Read
Definition):允许角色成员读取一个对象的XMLA的定义,而不能够对其进行修改或读取与它相关的数据。如果用户需要能够查看对象在SSMS或BIDS(在联机模式下连接到数据库),他们必须拥有此权限的角色成员。
(2)处理(Process):允许一个角色的成员来处理对象。
本系列的第一节简单易懂,希望您能在轻松阅读中有所收获。下节将继续学习数据安全(Data Security),欢迎关注。