Example: Attribute-Based Data Partitioning

In attribute-based data partitioning, the attributes of one principal type are distributed over several data sources.

Denise DeLassandros wants to store user attributes firstname , lastname and email on the directory service, and all other user attributes on the database of the SAP NetWeaver Application Server (AS) Java. As a result:

  • The user management engine (UME) searches the directory service for the attributes firstname , lastname and email
  • The attributes firstname and lastname are populated whenever a user object is populated from the directory service data source
  • The attributes firstname and lastname can be modified because the directory service data source is not read only, but the email attribute cannot be modified
  • All other user attributes are stored in the AS Java database

Denise modifies her data source configuration file as follows:

Example

<dataSource id="CORP_LDAP"
      className="com.sap.security.core.persistence.datasource.imp.LDAPPersistence"
      isReadonly="false"
      isPrimary="true">
    ...
    <responsibleFor>
      <principals>
        <principal type="USER">
          <!-- Substructure specified means responsible
          for the specified namespace attribute tuples 
          of principals of type "USER" -->
          <nameSpace name="com.sap.security.core.usermanagement">
            <attributes>
              <attribute name="firstname" populateInitially="true"/>
              <attribute name="lastname" populateInitially="true"/>
              <attribute name="email" readonly="true"/>
            </attributes>
          </nameSpace>
        </principal>
      </principals>
    </responsibleFor>
    <notResponsibleFor>
    </notResponsibleFor>
    ...
</dataSource>

<dataSource id="PRIVATE_DATASOURCE"
      className="com.sap.security.core.persistence.datasource.imp.DataBasePersistence"
      isReadonly="false"
      isPrimary="true">
    ...
    <responsibleFor>
      <principals>
        <principal type="USER">
          <!-- No substructure specified means responsible
          for all namespace attribute tuples of principals
          of type "USER" except the ones in the
          notResponsibleFor subsection -->
        </principal>
      </principals>
    </responsibleFor>
    <notResponsibleFor>
    </notResponsibleFor>
    ...
</dataSource>