Multi-tenancy within an Org
ThoughtSpot uses Orgs to create isolated tenants on a ThoughtSpot instance.
The final stage of development and deployment for an embedded application results in at least one "prod environment" available to end users.
If a single database with a single set of tables has the data for all end customers, it is a multi-tenanted database, and a single "prod" environment can be used, utilizing all features within ThoughtSpot to separate users from different end customers and filter all data appropriately for each user.
If your data model is single-tenanted, please review the deployment pattern for single-tenanted data models.
Multi-tenancy at the user levelđź”—
Whether users can see each other is controlled by group membership and a property called shareability. Please see the documentation on access control and sharing to learn how to configure the shareability properties for users and groups to achieve separation within a single Org.
Multi-Tenancy at the data levelđź”—
In a multi-tenanted database, there is typically a column named “customer_id” or “tenant_id” on every row of data within the database; we’ll call it the tenant key.
Filtering against this tenant key splits the data for each end customer organization.
If the cloud data warehouse you are connecting to is multi-tenanted as described above, you will only need one set of data objects in ThoughtSpot.
Shared content will be filtered per individual user using ThoughtSpot’s data security features, which include several mechanisms for row-level security (RLS).
Access controls on contentđź”—
ThoughtSpot controls content access through the concept of sharing. Content in ThoughtSpot belongs to its creator (owner). By default, they are the only users who know the content exists. This allows for self-service creation of new searches and Liveboards.
Sharing is controlled through the UI (including when embedded) or via the security REST APIs.
Please see the full documentation on sharing for access control to learn how the various options work to isolate content for end customers that share a single "prod" environment.
What content should be shared?đź”—
While you can share individual tables from connections to users, the best practice is to create Models and only share the relevant Models to end users. Any Liveboards and saved Answers shared to users should only connect to Models.
Remember to share the Model as READ_ONLY along with the Liveboards and answers so the users can access self-service features such as changing filter values.
Column level security (CLS) groupsđź”—
Column level security (CLS) can be configured at the individual table level through sharing. As with row-level security (RLS) groups, the best practice is to create separate groups specifically for the CLS groups.