Share via


Devralınan erişimi temizleme

Bu makalede, Microsoft Dataverse'de tablonun art arda yapılandırması değiştiğinde kayıtlar için devralınan erişimin nasıl kaldırılacağı anlatılır.

Belirtiler

Reparent veya Share eylemi için tablo ilişkisinin basamaklı davranışı Art Arda Yok olarak değiştirildikten sonra, kaldırılması gereken ilgili kayıtlara erişiminiz olmaya devam eder.

Kullanıcılar kayıtlara beklenmeyen erişime sahip olduklarını bildirebilir. İlgili kayıtlara erişimi doğrulamanın iki yolu vardır: Erişimi Denetle özelliğini veya RetrieveAccessOrigin iletiyi kullanma.

Erişimi Denetle özelliğini kullanma

Kimlerin bir kayda erişimi olduğunu denetlemek için model temelli uygulamalarda Erişimi Denetle özelliğini kullanın. Yöneticiler, tek tek kullanıcıları veya bir kayda erişimi olan tüm kullanıcıları denetlemek için bu özelliği kullanabilir.

Erişim denetleyicisini kullanırken, kullanıcının erişime sahip olmasının nedenlerinin listesini görürsünüz. Bu nedenlerden bazıları, ilgili kayda erişim nedeniyle paylaşımın verildiğini gösterir. Örneğin:

  • İlgili kayda erişimim olduğundan kayıt benimle paylaşıldı.
  • Kayıt, üyesi olduğum ekiplerle paylaşıldı çünkü ekibin ilgili kayda erişimi var.

RetrieveAccessOrigin iletisini kullanma

Geliştiriciler, bir kayda erişimi olan kullanıcıları algılamak için iletiyi kullanabilir RetrieveAccessOrigin . Bu ileti, kullanıcının neden erişime sahip olduğunu açıklayan bir cümle döndürür. Aşağıdaki sonuçlardan herhangi biri, ilgili kaydın paylaşılması nedeniyle erişim verildiğini gösterir:

PrincipalId is owner of a parent entity of object (<record ID>)
PrincipalId is member of team (<team ID>) who is owner of a parent entity of object (<record ID>)
PrincipalId is member of organization (<organization ID>) who is owner of a parent entity of object (<record ID>)
PrincipalId has access to (<parent record ID>) through hierarchy security. (<parent record ID>) is owner of a parent entity of object (<record ID>)

Daha fazla bilgi için bkz. Kullanıcının neden kodla erişime sahip olduğunu belirleme.

Neden

Tablo ilişkisi için basamaklı davranış değiştiğinde Dataverse, kullanıcılara daha önce verilmiş erişim iznini kaldırmak için zaman uyumsuz bir iş başlatır. Ancak bu iş başarısız olabilir ve bu da kullanıcıların erişimi korumasına neden olabilir.

Çözüm

Bu sorunu çözmenin ilk adımı, erişimi kaldırmak için sistem işini yeniden oluşturmaktır. İş başarısız olursa, bir geliştirici belirtilen kayıt kümesine değişikliği uygulamak için iletiyi kullanabilir ResetInheritedAccess .

Erişimi kaldırmak için sistem işini yeniden oluşturma

Geliştiriciler, zaman uyumsuz bir iş oluşturmayı yeniden denemek için iletiyi kullanabilir CreateAsyncJobToRevokeInheritedAccess .

Microsoft.Xrm.Sdk.Messages.CreateAsyncJobToRevokeInheritedAccessRequest sınıfını kullanın.

/// <summary>
/// Creates and executes an asynchronous cleanup job to revoke inherited access granted through cascading inheritance.
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <param name="relationshipSchemaName">The schema name of the entity relationship.</param>
public static void CreateAsyncJobToRevokeInheritedAccessExample(IOrganizationService service, string relationshipSchemaName)
{
    var request = new Microsoft.Xrm.Sdk.Messages.CreateAsyncJobToRevokeInheritedAccessRequest()
    {
        RelationshipSchema = relationshipSchemaName
    };

    service.Execute(request);
}

.NET için SDK ile iletileri kullanma hakkında daha fazla bilgi edinin.

Eylem CreateAsyncJobToRevokeInheritedAccess adlı RevokeInheritedAccessyeni bir zaman uyumsuz iş oluşturur. Bu işin başarısını izleyebilirsiniz. Daha fazla bilgi için bkz. Sistem işlerini izleme veya sistem işlerini kodla yönetme.

Devralınan erişimi sıfırlama

Erişimi kaldırmak için sistem işini yeniden oluşturmak başarısız olursa, sistem yöneticisi veya sistem özelleştirici ayrıcalıklarına sahip bir geliştirici eşleşen kayıtların ResetInheritedAccess bir alt kümesini hedeflemek için iletiyi kullanabilir. Tüm kayıtlara erişimi kaldırmak için bu iletiyi birkaç kez kullanmanız gerekebilir.

/// <summary>
/// Resets the inherited access for the matching records.
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <param name="fetchXml">The fetchxml query.</param>
public static void OutputResetInheritedAccess(IOrganizationService service, string fetchXml)
{
    var parameters = new ParameterCollection()
    {
        { "FetchXml", fetchXml}
    };

    var request = new OrganizationRequest()
    {
        RequestName = "ResetInheritedAccess",
        Parameters = parameters
    };

    var response = service.Execute(request);

    Console.WriteLine(response.Results["ResetInheritedAccessResponse"]);
}

.NET için SDK ile iletileri kullanma hakkında daha fazla bilgi edinin.

çok ResetInheritedAccess fazla eşleşen kayıt olmadığında ileti zaman uyumlu olarak yürütmeye çalışır. ResetInheritedAccessResponse Ardından değer ile ExecutionMode : Syncsona erer. Çok sayıda eşleşen kayıt varsa, işlem daha uzun sürer ve değer ile ExecutionMode : Asyncbiter. adlı Denormalization_PrincipalObjectAccess_principalobjectaccess:<caller ID> bir sistem işi oluşturulur ve bu işin başarısını izleyebilirsiniz. Daha fazla bilgi için bkz. Sistem işlerini izleme veya sistem işlerini kodla yönetme.

İleti, ResetInheritedAccess kayıtları tanımlamak için bir FetchXml sorgusu gerektirir. Bu sorgu aşağıdaki gereksinimleri karşılamalıdır:

  • principalobjectaccess(POA) tablosunu kullanın.
  • Yalnızca principalobjectaccessid sütunu döndürür.
  • Hiçbir link-entity öğe içermemelidir. Başka bir tabloya birleştirme ekleyemezsiniz.
  • Yalnızca tablonun sütunlarına göre filtre uygulayın principalobjectaccess .

Bu tablo Web API'sinde principalobjectaccess varlık türü olarak kullanılabilir. POA tablosu herhangi bir doğrudan veri değiştirme işlemini desteklemediğinden Dataverse tablosu/varlık başvurusuna dahil değildir. FetchXml sorgusunu oluşturmak için bu tablonun sütunlarını bilmeniz gerekir.

POA tablo sütunları

Yalnızca bu sütunları kullanarak bir FetchXml sorgusu oluşturmanız gerekir.

Mantıksal ad Tür Açıklama
accessrightsmask Tamsayı Sorumlunun doğrudan sahip olduğu erişim hakları için birleştirilmiş AccessRights sabit listesi üye değerlerini içerir.
changedon Datetime Sorumlunun kayda erişiminin değiştirildiği son tarih.
inheritedaccessrightsmask Tamsayı Devralma nedeniyle uygulanan erişim hakları için birleştirilmiş AccessRights sabit listesi üye değerlerini içerir.
objectid Benzersiz Tanımlayıcı Sorumlunun erişimi olan kaydın kimliği.
objecttypecode Tamsayı Tabloya karşılık gelen EntityMetadata.ObjectTypeCode değeri. Bu değer farklı ortamlar için aynı olmayabilir. Özel tablolar için, tablonun oluşturulma sırasına göre atanır. Bu değeri almak için tablonun meta verilerini görüntülemeniz gerekebilir. Bunu bulmak için çeşitli topluluk araçları vardır. Microsoft'un bir çözümü: Ortamınızdaki tablo tanımlarına göz atın.
principalid Benzersiz Tanımlayıcı Erişimi olan kullanıcının veya ekibin kimliği.
principalobjectaccessid Benzersiz Tanımlayıcı POA tablosunun birincil anahtarı.
principaltypecode Tamsayı Sorumlunun tür kodu. SystemUser = 8, Team = 9.

Aşağıdaki AccessRights sabit listesi üye değerleri ve inheritedaccessrightsmask sütunları için accessrightsmask geçerlidir:

Erişim türü Değer Açıklama
None 0 Erişim yok.
Read 1 Kayıt okuma hakkı.
Write 2 Kaydı güncelleştirme hakkı.
Append 4 Belirtilen kaydı başka bir kayda ekleme hakkı.
AppendTo 16 Belirtilen kayda başka bir kayıt ekleme hakkı.
Create 32 Kayıt oluşturma hakkı.
Delete 65,536 Kayıt silme hakkı.
Share 262,144 Kayıt paylaşma hakkı.
Assign 524,288 Belirtilen kaydı başka bir kullanıcıya veya takıma atama hakkı.

Değerin inheritedaccessrightsmask genellikle 135.069.719 olduğunu görebilirsiniz. Bu değer, dışındaki Createtüm erişim türlerini içerir; bu gerekli değildir çünkü bu haklar yalnızca önceden oluşturulmuş kayıtlar için geçerlidir.

FetchXml örnekleri

Bu bölüm, iletiyle birlikte kullanabileceğiniz FetchXml sorgularının ResetInheritedAccess bazı örneklerini içerir. Daha fazla bilgi için bkz . Sorgu oluşturmak için FetchXML kullanma.

Belirli bir hesap için belirli bir kullanıcıya verilen devralınan erişimi sıfırlama
<fetch>
    <entity name="principalobjectaccess">
        <attribute name="principalobjectaccessid"/>
        <filter type="and">
            <condition attribute="principalid" operator="eq" value="9b5f621b-584e-423f-99fd-4620bb00bf1f" />
            <condition attribute="objectid" operator="eq" value="B52B7A48-EAFB-ED11-884B-00224809B6C7" />
        </filter>
    </entity>
</fetch>
Belirtilen nesne türü için tüm alt satırlara verilen devralınan erişimi sıfırla
<fetch>
    <entity name="principalobjectaccess">
        <attribute name="principalobjectaccessid"/>
        <filter type="and">
            <condition attribute="objecttypecode" operator="eq" value="10042" />
        </filter>
    </entity>
</fetch>
Tüm nesne türleri için belirtilen kullanıcıya verilen devralınan erişimi sıfırla
<fetch>
    <entity name="principalobjectaccess">
        <attribute name="principalobjectaccessid"/>
        <filter type="and">
            <condition attribute="principalid" operator="eq" value="9b5f621b-584e-423f-99fd-4620bb00bf1f" />
        </filter>
    </entity>
</fetch>