【问题标题】:CRM 2011: Special permissions missing for UsersCRM 2011:用户缺少特殊权限
【发布时间】:2014-08-28 21:15:02
【问题描述】:

我们使用 SDK 在 CRM 2011 中创建了一批用户。但是,我们通过数据库添加了他们的安全角色记录。

一切似乎都运行良好,直到这些用户开始保存他们自己的用户仪表板和高级查找。

用户可以创建自己的用户仪表板。然而,一旦他们创造了它们,他们就看不到它们了。他们不在他们的仪表板列表中 - 只有那里的系统仪表板。

事件查看器甚至跟踪日志中都没有错误。

我使用 SQL Profiler 查看它在做什么,我发现它正在检查 PrincipalEntityMap 表中是否有 objecttypecode 为 1031 的主体 - 这是用户仪表板(称为 UserForm)。

这些记录是如何创建的?

我可以编写一个 SQL 脚本来用这些缺失的记录填充数据库。

我想知道他们为什么失踪?有任何想法吗?

PrincipalEntityMap 的记录从何而来?

【问题讨论】:

    标签: dynamics-crm-2011 dynamics-crm crm


    【解决方案1】:

    因为我们通过数据库而不是通过 SDK 创建了 UserRole(即用户安全角色)记录 - 我们错过了一些 POA(主体对象访问)相关记录。 可以调用许多存储过程来重新初始化这些记录。 我们编写了一个脚本来为所有用户重置这些记录:

    -- This will create PrincipalEntityMap for users - if they are not there:
    INSERT INTO PrincipalEntityMap (ObjectTypeCode, PrincipalId, PrincipalEntityMapId)
    SELECT 1031, sup.PrincipalId, NEWID()
    FROM SystemUserPrincipals sup 
    INNER JOIN SystemUser su ON su.SystemUserId = sup.SystemUserId
    WHERE 
    (sup.PrincipalId = su.SystemUserId) AND
    (sup.PrincipalId NOT IN
        (
            SELECT pem.PrincipalId 
            FROM PrincipalEntityMap pem
            WHERE pem.ObjectTypeCode = 1031
        )
    )
    
    DECLARE @PrincipalTable TABLE (PrincipalID uniqueidentifier)
    DECLARE @CurrentPrincipalID uniqueidentifier
    DECLARE @UserIds VARCHAR(60)
    DECLARE @Type INT
    
    BEGIN TRANSACTION ResetPrincipalEntitiyMap
    BEGIN
        SET @Type = 8
    
        INSERT INTO @PrincipalTable (PrincipalID)
        SELECT sup.PrincipalId 
        FROM SystemUserPrincipals sup WITH (NOLOCK) 
        INNER JOIN SystemUser su WITH (NOLOCK) ON sup.SystemUserId = su.SystemUserId AND sup.PrincipalId = su.SystemUserId
    
    
        WHILE EXISTS (SELECT PrincipalID FROM @PrincipalTable)
        BEGIN
    
            SELECT TOP 1 @CurrentPrincipalID = PrincipalID
            FROM @PrincipalTable
            ORDER BY PrincipalID ASC
    
            EXEC p_PrincipalEntityMapReinit @CurrentPrincipalID, @Type
    
            EXEC p_PrincipalAttributeAccessMapReinit @CurrentPrincipalID, @Type
    
            SET @UserIds = cast(@CurrentPrincipalID AS VARCHAR(50))
    
            EXEC p_SystemUserBuEntityMapReinit @UserIds
    
            DELETE FROM @PrincipalTable WHERE PrincipalID = @CurrentPrincipalID
    
        END
    END
    
    
    COMMIT TRANSACTION ResetPrincipalEntitiyMap
    

    请注意:始终执行安全性的插入/更新/删除 相关实体(User、UserRole、Team、TeamRole 等)通过 SDK - 而不是数据库。 SDK 在 使用 SQL 会错过的背景。

    【讨论】:

      【解决方案2】:

      在尝试解决 CRM 2013 上 Exchange 服务器端同步的常见/持续问题(启用联系人、任务和预约同步时,错误代码电子邮件服务器:Crm.80044151),我们还尝试了使用您的脚本重新初始化主体表。
      对于 CRM2013/15,它必须稍作修改,因为 SP p_PrincipalEntityMapReinit 的签名已更改。
      这是更新后的 TSQL - 也许它可以帮助其他人(在我们的例子中,它没有:( ):

      DECLARE @PrincipalTable dbo.EntityIdCollection
      DECLARE @CurrentPrincipalID uniqueidentifier
      DECLARE @UserIds VARCHAR(60)
      DECLARE @Type INT
      
      BEGIN TRANSACTION ResetPrincipalEntitiyMap
      BEGIN
          SET @Type = 8
      
          INSERT INTO @PrincipalTable (id)
          SELECT sup.PrincipalId 
          FROM SystemUserPrincipals sup WITH (NOLOCK) 
          INNER JOIN SystemUser su WITH (NOLOCK) ON sup.SystemUserId = su.SystemUserId AND sup.PrincipalId = su.SystemUserId
      
          EXEC p_PrincipalEntityMapReinit @PrincipalTable, @Type
      
          WHILE EXISTS (SELECT id FROM @PrincipalTable)
          BEGIN
      
              SELECT TOP 1 @CurrentPrincipalID = id
              FROM @PrincipalTable
              ORDER BY id ASC
      
              EXEC p_PrincipalAttributeAccessMapReinit @CurrentPrincipalID, @Type, 1
      
              SET @UserIds = cast(@CurrentPrincipalID AS VARCHAR(50))
      
              EXEC p_SystemUserBuEntityMapReinit @UserIds
      
              DELETE FROM @PrincipalTable WHERE id = @CurrentPrincipalID
      
          END
      END
      
      COMMIT TRANSACTION ResetPrincipalEntitiyMap
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 2020-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多