Choose a setup
Answer these questions in order and use the first setup that fits:- Does the warehouse need to control what each person can read, or log queries by person? If not, and Lightdash roles and user attributes are enough, use one shared connection.
- Does everyone who needs different data have their own warehouse account? If not, personal credentials can’t separate them. Use one shared connection with user attributes where that’s enough, and a project per audience only as a last resort.
- Do most people only view dashboards? If so, and your warehouse is Trino, Databricks, or BigQuery, use optional personal credentials.
- Does your warehouse have a sign-in flow for personal credentials? If it does, use required personal credentials. If it doesn’t, requiring them means issuing a warehouse login to every viewer, so compare that with a project per audience.
One shared connection
Everyone queries as one warehouse account, set on the project connection. Make it a dedicated read-only account, not a person’s own sign-in. This fits when Lightdash roles are enough to control what people can do, and everyone in the project can see everything that account can read. Most teams start here: people see dashboards as soon as they’re invited, and scheduled deliveries, embedding, and service accounts work without extra setup. The warehouse sees one user, so its permissions can’t differ by person and its audit logs show only the shared account. Lightdash roles control who can explore or open the SQL runner, not which tables or rows the warehouse returns. Anyone withmanage:SqlRunner can query everything the shared account can read. Developers and Admins have that permission by default. A custom role can leave it out, but it can’t remove a permission someone already has from their organization role.
To limit what people see without changing the warehouse, use user attributes. They filter rows and hide fields in everything built from the semantic layer, but they don’t apply to raw SQL.
Every warehouse supports this setup.
Required personal credentials
Each person queries as themselves, so the warehouse decides what they can read and logs their queries under their own account. Turn on Require users to provide their own credentials in the project’s warehouse connection settings, and everyone adds personal warehouse credentials. Choose this when access rules already live in the warehouse, you need per-person audit logs, or developers need raw SQL without seeing everything. It works best on a warehouse with a sign-in flow. Everyone has to add credentials before they see any data, including people who only view dashboards. With a sign-in flow, that’s one sign-in. Without one, each viewer needs a warehouse login issued for them. Some features work differently:- Service accounts can’t run queries, so API and CLI scripts that query the project through one stop working.
- Embedding isn’t available, because embedded viewers can’t provide credentials.
- Scheduled deliveries run with their owner’s credentials, and fail if the owner’s are missing or expired.
- Pre-aggregates ignore personal credentials. A query that matches one returns the shared materialized results, whatever the viewer’s own account can read, so keep explores with restricted data out of
pre_aggregates. - Cached results are stored per person, so one person’s query doesn’t speed up anyone else’s.
- Snowflake: Sign in with Snowflake, once you add a security integration.
- Databricks: Sign in with Databricks, on instances with Enterprise enabled and an OAuth application.
- BigQuery: Sign in with Google.
- Redshift: Sign in with AWS, through IAM Identity Center. Everyone gets the one permission set fixed on the connection, so it replaces passwords but doesn’t give people different access.