Skip to main content
SAP integration

SAP roles and permissions

Which roles configure the SAP integration, schedule, confirm and force transport imports, and read the SolMan archive — and the separation-of-duties rules enforced in code.

SAP rights follow TENSOR's role catalog. Configuring the integration uses the general integration permissions. Transport import steps have their own permission keys, so that scheduling and confirming an import never sit on one operational role.

Roles

RoleWhat the role can do
platform_ownerEverything, including scheduling, confirming and force-importing transports.
tenant_adminConfigure connections, agents, landscapes, initial setup, auto-sync, migration mode, EWA reports and SolMan imports; read and export the SolMan archive.
change_managerSchedule and cancel imports, view the import queue, force an import despite a collision.
infrastructure_admin (Basis administrator)View the import queue and confirm that an import was executed in SAP STMS.
Change approvers / CABApprove transport Changes through the normal Change approval.
auditor, compliance_officerRead SAP settings pages; read and export the SolMan archive.
external_auditorRead the SolMan archive.
service_desk_agent, incident_manager, cmdb_adminRead SAP settings pages (connections, health, HANA, landscapes).

A dedicated sap_basis_admin role is Planned — not yet available. Until then, infrastructure_admin acts as the Basis administrator.

Permission keys

PermissionAllows
integration.config.readView all SAP settings pages, transports, drift, collisions, authorisations, HANA, Cloud ALM, EWA and agents.
integration.config.manageCreate, edit and remove connections; store secrets; test connections; create and disable agents; set collectors; landscapes; initial setup; auto-sync; migration mode; EWA upload; SolMan dry-run and import.
sap.transport.importView the import schedule of a transport Change.
sap.transport.scheduleSchedule and cancel a transport import.
sap.transport.confirm_importConfirm that a scheduled import was executed in SAP STMS.
change.sap_transport.force_importOverride a detected object collision with a mandatory annotation.
sap.archive.readBrowse the SolMan archive and its import batches.
sap.archive.exportExport per-batch archive evidence with signed manifest.

Generating the Berechtigungskonzept, which includes the SAP SoD catalog, needs reporting.berechtigungskonzept.export and the flag bait_berechtigungskonzept_export.

Separation of duties enforced in code

RuleHow it is enforced
Developer is not approverThe person who created the transport Change may not approve it. Checked when a transport is created or its position is updated.
Developer is not importerThe Change creator may not confirm the import. A violation returns FORBIDDEN at the import confirmation and is audited.
Scheduling and confirming are splitsap.transport.schedule (change manager) and sap.transport.confirm_import (Basis administrator) are never granted to one operational role; only the platform owner holds both.
Approval stages are separateNot yet enforced. The DEV-to-QA approver should not approve QA-to-PROD. The rule is in the catalog, but enforcing it needs per-stage approver tracking.
Force import is a separate rightOnly holders of change.sap_transport.force_import can override a collision, always with an annotation and an audit row.
Machine ingest is not a personAgent data never counts as an approver or importer, so it cannot satisfy or bypass an SoD rule.

Transport SoD is therefore partially available: developer-is-not-approver and developer-is-not-importer are enforced; approval-stage separation is not. For the platform-wide rule list, see segregation of duties.

Who counts as the developer

The SAP developer's own SAP user is not stored in TENSOR, so the creator of the linked Change serves as the developer identity. If the developer and the Change creator are different people, the check is conservative and enforces on the Change creator.

For auto-created Changes, the creator is the mapped TENSOR user of the transport owner or, where no mapping exists, an explicitly audited system actor.

What a refusal looks like

  • Approval refused. If you created the transport Change, TENSOR refuses your approval. Another approver must approve it.
  • Confirmation refused. If you created the Change, Confirm import fails with a separation-of-duties error, and the refusal is written to the audit trail.
  • Position update refused. If the SoD guard refuses a position update, TENSOR records a drift event of kind Position update refused by the separation-of-duties rule instead of dropping the fact.

How the duties divide in practice

StepWho actsPermission
Approve the transport ChangeChange approvers / CAB (not the Change creator)Normal Change approval
Schedule, reschedule or cancel an importChange managersap.transport.schedule
Execute the importBasis team, in SAP STMS— (outside TENSOR)
Confirm the executed importBasis administrator (not the Change creator)sap.transport.confirm_import
Override a collisionHolder of the force-import right, with annotationchange.sap_transport.force_import
Configure connections, agents, landscapes, migrationTenant administratorintegration.config.manage
Review, audit, export evidenceAuditor, compliance officerintegration.config.read, sap.archive.read, sap.archive.export

How administrators grant access

A tenant administrator assigns roles under Settings → Roles or on the user record under Users. Custom roles can include the SAP permission keys. Adding compliance-tagged permissions to a custom role needs dual approval.

When you design custom roles, keep sap.transport.schedule and sap.transport.confirm_import on different roles. Only the platform owner is meant to hold both.