Managed Dbt
You set up managed dbt by linking your git repo to a hosted runner. Then you assign warehouse roles for scheduled jobs and developer accounts. Data teams often use one shared warehouse account to speed up this setup. That shared role gives every developer broad read and write power over live tables. One bad query or leaked key can alter core data or expose private fields. How a managed dbt workflow operates A hosted service runs your SQL models on a schedule without local servers. You start b
Managed Identities: the complete guide
Architecture patterns, implementation strategies, and security best practices. Delivered to your inbox.
You set up managed dbt by linking your git repo to a hosted runner. Then you assign warehouse roles for scheduled jobs and developer accounts. Data teams often use one shared warehouse account to speed up this setup. That shared role gives every developer broad read and write power over live tables. One bad query or leaked key can alter core data or expose private fields.
How a managed dbt workflow operates
A hosted service runs your SQL models on a schedule without local servers. You start by linking your version control system to the hosted workspace. Next, you set up two types of profiles for your data warehouse. The first profile is for developers who write and test code in a browser. Each developer logs in and uses an individual warehouse role to build test tables. These test tables live in a separate personal schema inside the warehouse. The second profile is for automated job runs in staging or live setups. The job runner uses a dedicated service account to build final data models. When a scheduled job starts, the runner pulls the latest code from your branch. It compiles the model files into raw SQL statements for your specific warehouse. Then it sends those statements to the warehouse using the service account key. The warehouse checks the role permissions and runs the SQL to update the tables.
Where native warehouse roles fall short
Native warehouse roles handle basic login checks and schema separation well. They keep developer test tables out of your main reporting schemas. They also let you restrict who can trigger a scheduled job in the workspace. Still, native roles only check who logs in when a session starts. They do not inspect what individual SQL statements do while the query runs. A developer still needs read permissions on raw source tables to test new models. Those raw tables often hold sensitive emails, phone numbers, card numbers, or national IDs. When a developer runs a preview query, the warehouse returns all those raw fields. You can set up column rules inside the warehouse, but that takes heavy upkeep. Every new source table needs manual policy updates before the team can read it. Also, shared service keys for job runners often stay valid for months. If someone copies a service key, they can query the warehouse from anywhere. Warehouse logs show the shared service role name instead of the real person.
How to separate developer and job permissions
Good security starts by splitting human queries from automated job runs. Give the job runner a service role that only writes to target schemas. Revoke its ability to drop source tables or change warehouse settings. For developers, remove direct login keys for the main production warehouse. Instead, give them a read role that only pulls from safe sample views. When teams must query live source tables, use data masking on sensitive fields. Masking rewrites matched fields like emails or card numbers in the query results. This lets developers test model logic while hiding private customer details. You should also tie every interactive query to an individual user identity. That way, your audit logs show which person ran each SQL statement. Finally, rotate your warehouse service keys on a regular schedule to limit risk.
Managed Identities: architecture patterns and best practices
Continue reading? Get the full guide.
Free. No spam. Unsubscribe anytime.
Check database and API queries on the wire
Identity tools, roles, and network rules decide who opens a session. Setup alone cannot check what each query does or mask sensitive values in a response once a session starts. When workflows touch Postgres, MySQL, SQL Server, MongoDB, ClickHouse, Kubernetes APIs, SSH, or internal HTTP APIs, hoop.dev runs beside those services as an open-source proxy, a sidecar for your Postgres or API. It inspects requests coming in and results going back on the wire.
Your login details and client tools stay as they are while hoop.dev guardrails refuse bad deletes or drops before they run. On responses, hoop.dev data masking rewrites matched sensitive values in memory. Furthermore, hoop.dev holds SOC 2 Type II, is MIT licensed, and writes every query and decision to an audit trail that generates evidence for HIPAA, GDPR, and PCI DSS. See the source on GitHub.
Frequently asked questions
What is the difference between dbt Core and a hosted setup?
The open-source tool runs from your local command line or your own server. A hosted setup gives you a browser editor, a job scheduler, and team permissions.
Should developers share a single warehouse role for testing?
No, sharing a role hides who ran a query in your warehouse logs. It also causes naming conflicts when two people build test models at once.
How do we protect sensitive columns during model development?
You can point developer profiles to safe staging data with fake values. You can also apply masking rules that rewrite emails and phone numbers in results.
Related guides
In this post