Summary and recommendation
Apache Superset user management can be run manually, but complexity usually increases with role models, licensing gates, and offboarding dependencies. This guide gives the exact mechanics and where automation has the biggest impact.
Apache Superset is a free, open-source (Apache 2.0) business intelligence platform with no native SCIM provisioning and no per-seat licensing costs. User and role management is handled through a Flask-AppBuilder (FAB) RBAC system accessible at Settings → Security.
Five built-in roles exist - Admin, Alpha, Gamma, sql_lab, and Public - and custom roles can be created and combined with them at no additional cost. SSO integration (OAuth, LDAP) requires code-level configuration in superset_config.py; there is no UI-driven SSO setup.
Because there is no SCIM support, every app in your identity stack that connects to Superset requires manual lifecycle management unless you build custom automation.
Quick facts
| Admin console path | Settings → Security (menu group containing List Users, List Roles, Row Level Security) |
| Admin console URL | Official docs |
| SCIM available | No |
| SCIM tier required | Open Source (Free) |
| SSO prerequisite | Yes |
User types and roles
| Role | Permissions | Cannot do | Plan required | Seat cost | Watch out for |
|---|---|---|---|---|---|
| Admin | All possible rights: grant/revoke rights from other users, alter any user's slices and dashboards, access all databases by default, manage roles and permissions, access SQL Lab. | Nothing restricted; full superuser access. | Free (open source) | No seat cost; self-hosted open source. | Altering built-in Admin role permissions directly is not recommended; changes are overwritten on next superset init run. |
| Alpha | Access to all data sources; can add and alter data sources; can create and modify own slices and dashboards; can create custom roles for Gamma users. | Cannot grant or revoke access from other users. Cannot alter objects owned by other users. | Free (open source) | No seat cost; self-hosted open source. | Alpha users need per-database access granted explicitly; they do not inherit all-database access automatically like Admin. |
| Gamma | Read-only consumer role. Can view slices and dashboards made from data sources explicitly granted via a complementary custom role. Can create slices and dashboards from accessible data sources. | Cannot alter or add data sources. Cannot see data sources not explicitly granted. Cannot manage users or roles. | Free (open source) | No seat cost; self-hosted open source. | Gamma alone grants no data access; a separate custom role with specific datasource permissions must be combined with Gamma for the user to see any data. |
| sql_lab | Grants access to the SQL Lab interface. Must be combined with database-level access permissions. | Does not grant data source or database access on its own; must be combined with other roles. | Free (open source) | No seat cost; self-hosted open source. | Admin users have SQL Lab access by default; Alpha and Gamma users require the sql_lab role to be explicitly assigned. |
| Public | Minimal read-only access for anonymous/unauthenticated users. Allows viewing of dashboards where the Public role has been explicitly granted dataset or dashboard access. | Cannot access any data without explicit dataset grants. Cannot log in or manage any content. | Free (open source) | No seat cost; self-hosted open source. | Public role permissions are overwritten by superset init if PUBLIC_ROLE_LIKE is set. Adding permissions to the Public role can unexpectedly affect API permissions for other roles (known bug). |
Permission model
- Model type: hybrid
- Description: Role-based access control (RBAC) implemented via Flask AppBuilder (FAB). Permissions are assigned to roles, and roles are assigned to users. Built-in roles (Admin, Alpha, Gamma, sql_lab, Public) are managed by Superset and re-synchronized on
superset init. Custom roles can be created and combined (unioned) with built-in roles. Permissions are highly granular: model-level (can_add, can_delete, can_edit, can_show, can_list), view-level, datasource-level, and database-level. Row-Level Security (RLS) filters can be applied per role to restrict data rows returned by queries. Permissions are assigned programmatically at startup by SupersetSecurityManager; no static human-readable permission list is maintained. - Custom roles: Yes
- Custom roles plan: Free (open source)
- Granularity: Model/action level (can_add, can_delete, can_edit, can_show, can_list per entity), view level, per-datasource, per-database, and row-level security (SQL WHERE clause filters per role). Approximately 280+ discrete permissions exist.
How to add users
- Log in as an Admin user.
- Navigate to Settings → Security → List Users.
- Click the '+' (Add) button to open the user creation form.
- Enter required fields: First Name, Last Name, Username, Email, Password, Confirm Password.
- Select one or more roles from the Roles multi-select field (e.g., Gamma, Alpha, sql_lab).
- Click 'Save' to create the user.
- Alternatively, create users via CLI:
superset fab create-user --username <u> --firstname <f> --lastname <l> --email <e> --password <p> --role <role>. - Alternatively, enable FAB Security API (
FAB_ADD_SECURITY_API = Truein superset_config.py) and POST to/api/v1/security/users/.
Required fields: first_name, last_name, username, email, password, role (at least one)
Watch out for:
- The FAB REST API for user CRUD is in beta and disabled by default; requires
FAB_ADD_SECURITY_API = Truein superset_config.py. - If user/role management options are missing from the Settings menu, run
superset initto re-sync permissions. - Users provisioned via LDAP or OAuth are created automatically on first login; they do not appear in the user list until they sign in.
- No native bulk CSV user import exists in the UI; bulk creation requires scripting via the CLI or API.
- Email notifications on user creation are only sent if an SMTP server is configured in superset_config.py.
| Bulk option | Availability | Notes |
|---|---|---|
| CSV import | No | Not documented |
| Domain whitelisting | No | Automatic domain-based user add |
| IdP provisioning | Yes | Free (open source) - requires manual configuration of AUTH_TYPE (LDAP or OAuth), AUTH_ROLES_MAPPING, and optionally AUTH_ROLES_SYNC_AT_LOGIN in superset_config.py. No native SCIM support. Users are auto-created on first SSO login. |
How to remove or deactivate users
- Can delete users: Yes
- Delete/deactivate behavior: User deletion is technically available via the UI (Settings → Security → List Users → delete icon) and via the FAB Security API (DELETE /api/v1/security/users/{pk}), but deletion frequently fails with a foreign key constraint error ('Associated data exists, please delete them first') if the user has any associated records in the metadata database (dashboards, charts, databases created_by, query logs, etc.). Even simply viewing a chart creates a log entry that blocks deletion. The recommended approach per Apache Superset documentation is to deactivate (set Active = False) rather than delete the user.
- Log in as an Admin user.
- Navigate to Settings → Security → List Users.
- Click the edit (pencil) icon next to the target user.
- Uncheck the 'Active' checkbox.
- Click 'Save'. The user can no longer log in but their record and associated data are preserved.
| Data impact | Behavior |
|---|---|
| Owned records | Dashboards, charts, datasets, and database connections created by the user remain in the system and retain the user as creator/owner. Ownership must be manually reassigned if needed. |
| Shared content | Shared dashboards and charts remain accessible to other users with appropriate permissions. The deactivated user's content is not removed. |
| Integrations | Database connections (created_by foreign key) and query log entries referencing the user remain intact. These foreign key references are the primary cause of deletion failures. |
| License freed | Not applicable. Apache Superset is open source with no per-seat licensing. |
Watch out for:
- Deleting a user who has ever viewed a chart will fail due to log table foreign key constraints, even if all their dashboards and charts have been deleted.
- To force-delete a user, all referencing records (logs, created_by on databases/datasets, ownership entries) must be manually removed from the metadata database first, which destroys audit history.
- Deactivated users still appear in the user list; there is no automatic cleanup or archival.
- When a user is removed from an upstream IdP (LDAP/OAuth), their Superset profile is not automatically deactivated; manual deactivation in Superset is required.
- The FAB Security API DELETE endpoint for users returns a 422 error with a foreign key constraint message when associated data exists.
License and seat management
| Seat type | Includes | Cost |
|---|---|---|
| Self-hosted (open source) | All features under Apache 2.0 license. No seat limits, no per-user fees. Admin, Alpha, Gamma, sql_lab, and Public roles included. | Free |
- Where to check usage: Settings → Security → List Users (shows all registered users and their active status). Query the metadata database table
ab_userfor programmatic reporting. - How to identify unused seats: No built-in inactive user report in the UI. Admins can query the
logstable in the metadata database to find users with no recent activity, or filter the user list by last login date if exposed. Theab_user.last_logincolumn in the metadata database can be queried directly. - Billing notes: Apache Superset is open source (Apache 2.0 license) with no licensing fees or seat costs. Preset.io is the commercial managed offering with additional enterprise features and support tiers.
The cost of manual management
Because Apache Superset has no native SCIM and no UI-driven IdP sync, every joiner, mover, and leaver event must be handled manually by an admin inside Settings → Security → List Users.
Offboarding is particularly fragile: deleting a user who has ever viewed a chart fails with a foreign key constraint error ('Associated data exists, please delete them first'), meaning the practical offboarding action is deactivating the account rather than removing it. Deactivated users remain visible in the user list indefinitely with no archival or cleanup.
When a user is removed from an upstream IdP, their Superset profile is not automatically deactivated - admins must catch and act on each departure separately. With ~280+ largely undocumented permissions, building and auditing custom roles adds compounding overhead for any team managing more than a handful of users.
What IT admins are saying
Community feedback consistently flags two pain points: permission opacity and broken deletion. One GitHub contributor noted that "permission management [is] tricky because there is little documentation on the subject" (Issue #27765, March 2024).
The Superset core team acknowledged in SIP-152 (February 2025) that "managing roles at the individual user level leads to inefficiencies and inconsistencies, making access control difficult to maintain and audit." The user deletion bug - surfaced by the UI error "Associated data exists, please delete them first" - has been open since February 2021 (Issue #13345) and affects any user who has ever interacted with a chart or dashboard.
Bulk user import via CSV does not exist in the UI; it requires CLI scripting or API calls. SSO setup complexity and the absence of SCIM are recurring themes across community discussions.
Common complaints:
- No out-of-box SAML support; requires custom security manager implementation.
- Custom development required for enterprise SSO (OAuth, LDAP configuration is code-based, not UI-driven).
- Complex authentication setup with no native SCIM provisioning.
- User deletion is broken in practice due to foreign key constraints from log entries; even viewing a chart blocks deletion.
- No native bulk user import via CSV in the UI; requires CLI scripting or API calls.
- ~280+ permissions are largely undocumented and unintelligible to administrators, making custom role creation very difficult.
- Built-in role permissions are overwritten on every
superset initrun, making manual customization of base roles fragile. - No user groups feature (SIP-152 proposed but not yet shipped as of early 2026); roles must be assigned individually to each user, creating scaling problems.
- Granting chart-level access without granting access to all dashboards sharing the same dataset is difficult to configure correctly.
- Adding permissions to the Public role can unexpectedly remove API permissions from the Admin role (known bug).
- User and role management options can disappear from the Settings menu after authentication type changes or incomplete builds, requiring
superset initre-run.
The decision
Manual management of Apache Superset is workable for small, stable teams where user churn is low and an engineer is available to handle config-level SSO setup.
It becomes a liability at scale: every offboarding requires a manual deactivation step that is decoupled from your IdP, role auditing across ~280+ permissions is largely undocumented, and there is no bulk import path in the UI.
Teams running Superset as part of a broader SaaS portfolio - where every app needs consistent access governance - will find the absence of SCIM and the broken delete behavior create meaningful audit and compliance gaps. The commercial managed offering, Preset, provides easier IdP integration but is a separate product with its own pricing.
Bottom line
Apache Superset gives you a fully featured BI platform at zero licensing cost, but that cost is paid in operational overhead: no SCIM, no UI-driven SSO, a user deletion flow that fails in practice due to database constraints, and a permission system with ~280+ options that are largely undocumented.
For teams where every app in the identity stack needs reliable, auditable lifecycle management, Superset's manual-only provisioning model creates persistent gaps - particularly around offboarding, where deactivation must be performed manually in Superset even after a user is removed from the IdP.
Automate Apache Superset workflows without one-off scripts
Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.