添加一个自定义的SQL Serverlogin到Microsoft Dynamics CRM 4.0,得到空的结果集

在工作中,我们安装了Microsoft Dynamics CRM 4.0,员工使用他们的LANloginloginCRM的Web界面。

我们使用db_datareaderangular色添加了一个基于SQL Server的自定义login(对于服务器和db * _MSCRM)。 新的login可以从视图中select,但是它返回一个空的结果集。 如果我使用我的LAN IDlogin到SQL Server Management Studio并针对相同的视图运行sql,则会得到预期的数据。

任何想法是什么缺失或错误?


UPDATE

我最终能够绕开这个问题。 问题是,视图后面的sql链接到一个自定义用户表,这阻止了我的sql服务器login返回任何数据,因为它不在这个自定义用户表(SystemUserBase)

left join SystemUserBase u on (u.SystemUserId = dbo.fn_FindUserGuid() and u.IsDisabled = 0) left join UserSettingsBase us on us.SystemUserId = u.SystemUserId left join OrganizationBase o on u.OrganizationId = o.OrganizationId 

我想微软是这样devise的,这样产品就是自助服务,而不需要DBA来将用户添加到数据库中。 用户通过应用程序进行pipe理。 安全是通过意见来执行的。

在任何情况下,我都可以通过传递SystemUserId GUID作为我的LAN ID,同时以普通的sqllogin身份login。 有一个函数返回当前login的LAN ID的guid: print dbo.fn_FindUserGuid(); 。 然后我只是跑了一个修改后的视图sql的副本:

 declare @user_guid char(36); set @user_guid = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'; /* obfuscated */ ... left join SystemUserBase u on (u.SystemUserId = @user_guid and u.IsDisabled = 0) ... 

我也必须删除对通用login没有执行权限的任何函数的引用(即dbo.fn_UTCToTzSpecificLocalTime )。 或者我可以授予每个执行权。

或者,我可以调查在SystemUserBase表中为我的通用login创build一个条目,以便我不绑定到我的LAN GUID。


更新2

我能够消除需要我的LAN GUID( SystemUserBase.SystemUserBase )。 我只是删除所有的权限相关的where子句。 然后,StringMap查找所需的全部是OrganizationBase.OrganizationId guid和OrganizationBase.LanguageCode ,在我们的例子中是en-us或1033。

如果我不关心查询,我不需要任何东西。 我只是直接对表没有StringMaps或权限where子句直接对表。

你的做法是错误的。

如果您想使用过滤视图,则必须使用域用户和CRM帐户。 应用程序在数据库安全层之上有自己的安全层。 因此,虽然您已授予用户对数据库本身的访问权限,但应用程序将负责关于其CRM特权的安全性。 请参阅过滤视图

筛选视图完全符合Microsoft Dynamics CRM安全模型。 当您运行从过滤视图获取数据的报表时,Microsoft Dynamics CRM安全angular色将确定您可以在报表中查看哪些数据。

请记住,基本上,Dynamics CRM中直接数据库访问的唯一真实支持使用情况是报告(并且仅限于过滤视图)。 出于其他原因,您不应该直接与数据库进行交互。

要使用Filtered Views,您需要在login时设置CRMReaderRole,然后在查询需要设置的数据之前CONTEXT_INFO

一次性设置

 USE [CRM_MSCRM] GO EXEC sp_addrolemember N'CRMReaderRole', N'your sql login here' GO 

然后在查询过滤的视图之前执行此操作

 SELECT @uid = SystemUserId FROM CRM_MSCRM.dbo.SystemUserBase WHERE FullName = 'CRM USER TO IMPERSONATE' SET CONTEXT_INFO @uid 

注:这将与SQL用户,但它不会与链接的服务器一起工作。 在CRM 2011 UR 17上testing