如何通过XMLA脚本查询SSAS多维数据集的角色及成员归属?
如何通过XMLA的Discover请求查询SSAS角色及成员信息
我之前在做SSAS多维数据集角色与权限的自动化创建时,遇到了个小麻烦——已经能通过T-SQL生成XMLA脚本完成角色的增删改操作,但就是没法查询特定用户是否已经被分配了某个角色。我已经会用Discover请求来查询目录里的数据集列表,比如这个示例脚本:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"> <RequestType>MDSCHEMA_CUBES</RequestType> <Restrictions /> <Properties> <PropertyList> <Catalog>MyCube</Catalog> </PropertyList> </Properties> </Discover>
我翻了官方的Request类型列表,但没找到能返回角色或角色成员的类型,后来摸索出了两个好用的请求类型,刚好能解决这个问题:
1. 查询所有角色信息:DISCOVER_ROLES
这个请求可以返回指定数据库(或整个SSAS实例)下的所有角色基础信息,包括角色ID、名称、描述等。示例脚本如下:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"> <RequestType>DISCOVER_ROLES</RequestType> <Restrictions> <RestrictionList> <Catalog>MyCube</Catalog> <!-- 如果要限定查询某个数据库就保留这个节点,查整个实例可以移除 --> </RestrictionList> </Restrictions> <Properties> <PropertyList> <Catalog>MyCube</Catalog> </PropertyList> </Properties> </Discover>
2. 查询角色成员或用户所属角色:DISCOVER_ROLE_MEMBERS
这个请求是核心,既能查某个角色下的所有成员,也能反过来查某个用户属于哪些角色。
场景一:查询特定用户的已分配角色
只需在限制条件里指定用户账号(格式要和SSAS中存储的一致,比如域账号DOMAIN\UserName):
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"> <RequestType>DISCOVER_ROLE_MEMBERS</RequestType> <Restrictions> <RestrictionList> <Catalog>MyCube</Catalog> <MemberName>DOMAIN\UserName</MemberName> </RestrictionList> </Restrictions> <Properties> <PropertyList> <Catalog>MyCube</Catalog> </PropertyList> </Properties> </Discover>
场景二:查询特定角色的所有成员
把限制条件换成角色名称即可:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"> <RequestType>DISCOVER_ROLE_MEMBERS</RequestType> <Restrictions> <RestrictionList> <Catalog>MyCube</Catalog> <RoleName>MyCustomRole</RoleName> </RestrictionList> </Restrictions> <Properties> <PropertyList> <Catalog>MyCube</Catalog> </PropertyList> </Properties> </Discover>
这些请求返回的是标准的行集结果,你可以通过T-SQL的OPENROWSET工具或者专门的XMLA执行客户端来解析,提取需要的角色或用户关联信息。
内容的提问来源于stack exchange,提问作者Alex_404
相关产品推荐
相关产品推荐

