Protected Instance Limitations on Staging (Self‑Hosted Business)

Here’s a clean, well-structured Markdown version you can paste directly into an n8n Community post:


:locked_with_key: Data Tables Permissions in Protected Instance (Staging)

Hello n8n community :waving_hand:

I’m currently using n8n Self-Hosted (Business plan) with multiple environments:

  • :test_tube: Development environment

  • :construction: Staging environment (configured as a Protected Instance)


:puzzle_piece: Problem / Question

In my Development environment, everything works as expected:

  • :white_check_mark: Modify workflows

  • :white_check_mark: Manage Data Tables

  • :white_check_mark: Import CSV files into Data Tables

However, in Staging (Protected Instance), permissions appear to be more restricted.


:eyes: Observed Behavior

:white_check_mark: As a member of the Protected Instance, I can:

  • Edit and update credentials

:cross_mark: But I cannot:

  • Modify Data Tables

  • Import data (e.g. CSV files) into Data Tables

  • Make any changes to Data Tables


:red_question_mark: Questions

  1. Is this behavior expected by design for Protected Instances?

  2. Are Data Tables intentionally read-only in a Protected Instance?

  3. Is there a way to:

    • Grant permission to modify Data Tables in Staging?

    • Temporarily allow CSV imports while keeping the instance protected?

  4. If this is not supported, what is the recommended deployment workflow for:

    • Managing Data Tables between Development → Staging?

Thanks in advance for your help and for sharing best practices!

Any clarification or documentation reference would be greatly appreciated.

@Rodolphe24 yeah Protected Instances are read-only by design, that’s why staging blocks Data Table edits and CSV imports. Push changes via your dev → staging deploy pipeline instead, or run a workflow that writes rows programmatically since workflow execution still works on protected instances.

{ "nodes": [ { "parameters": {}, "name": "When clicking Test workflow", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [200, 300] }, { "parameters": { "operation": "insert", "dataTableId": "YOURTABLEID", "dataMode": "autoMapInputData" }, "name": "Data Table", "type": "n8n-nodes-base.dataTable", "typeVersion": 1, "position": [440, 300] } ], "connections": { "When clicking Test workflow": { "main": [[{"node": "Data Table", "type": "main", "index": 0}]] } } }

swap in your table ID and feed rows from a Read CSV node upstream

good day @Rodolphe24
i’d manage the structure in Development and treat CSV imports or row population as environment-specific data outside the protected deploy flow.