Why Data Security Is More Than Just Restricting Access
Apr 02, 2025Security in a data architecture is not only about restrictions. Done well it is a design decision that shapes the whole system, and it pays you back in efficiency, clarity and the confidence to scale. There are three places it shows up: the ingestion layer where data lands, the presentation layer where data leaves, and the development workflow in the middle. Design roles that match those three areas and maintenance gets easier, because new people and new tools slot into an existing group instead of getting a custom set of permissions. You also accumulate less security debt, which is the pile of forgotten users and one off grants nobody can explain later.
Key takeaways
- Security, workflow and strategy are one system. Design them together and they reinforce each other instead of fighting.
- The landing zone is the first place to think about restrictions, because convenience is what pushes teams to load everything with an admin role.
- Just because a stakeholder wants data does not mean they always need it. Serve the smallest set that lets them decide.
- Developers need flexibility, not standing production rights. I prefer no human user deploying to production at all.
- Maintenance gets easier when roles match the design. A new developer joins the developer group, a new ingestion tool joins the loader role.
- Security debt is real, and it looks like forgotten users and random tool accounts whose permissions nobody can explain.
- It is almost always easier to add access later than to take it away, so start small and add on.
Security as part of the design
When security is done right it does more than protect the data. It adds efficiency to the workflow, clarity to the overall design, and the confidence to scale because you know things are under control.
That reframing matters, because security usually gets treated as a separate chore. The areas below are the ones I focus on most when I look at a team's setup.
Area of impact: data ingestion
Ingestion is where data first arrives from external sources into your warehouse or lake. Being thoughtful about that landing zone up front serves the whole architecture.
You can design the risk out by creating roles dedicated to those locations. It sounds obvious. It is also common for teams not to think about it at all when getting started.
What happens instead is that data goes wherever is convenient, often under the same admin role that runs everything else.
I tend to think left to right across the pipeline, so this is the natural first place to ask how you are restricting data and how that fits the design.
Area of impact: the presentation layer
Now jump to the opposite end: how data leaves your platform. The goal is to provide insight to the business or to your customers.
Just because they want data does not mean they always have to have it. My aim is to provide as little data out as they need to make their decisions.
This is not about being difficult. There is simply not much value in blindly opening everything up to whoever asks.
Break the layer into sections
One way to handle it is to split the presentation layer into sections, maybe dedicated to different departments or different customers.
Then the roles you create, the schemas you build and the way you serve data all line up with the needs of the business. The alternative is wide open access, which eventually becomes a problem.
So both ends of the pipeline, ingestion and the marts, should be restricted not only by roles and users but by design.
Area of impact: the development workflow
In the middle sit your developers and your data team. Every team is a little different here, and developers do need flexibility.
That does not mean they should have full production rights all the time.
This is where role based security really shines. You can be particular about what data they read, what they cannot create or drop, and assign every developer to that same role.
Security is not meant to slow development down. You still want to be protective, because we are all human and mistakes happen.
Keep people out of the deploy path
Personally I like to avoid having any human user responsible for deploying to production. I hand that to roles outside the developer role, while developers keep read visibility into production.
Developers should not feel an impediment while developing. They also should not be able to deploy to production directly.
That blends straight into workflow. On a modern stack with dbt and GitHub, you get branching, automated testing and deployments, and this is where it all comes to life.
Security, workflow and strategy play together. Design and name them together and you get a system, not a database with a few schemas and some permissions scattered around.
Benefit: maintenance gets easier
Aside from the obvious benefit of protecting data, thinking about the end to end design makes maintenance much easier, because the roles and permissions are specific to the design.
You stop needing a pile of individual custom roles:
- New developer joins, you add them to the developer group.
- New ingestion tool arrives, you assign it to the loader role.
- New reporting group appears, you point it at the role that matches its schema.
You might still have individual users, and you might tweak a few things. A lot of the time you do not have to, because the design already accounts for it.
Name the roles so they align with the schemas they serve and the whole thing is clear to anybody working with it.
When every developer holds the same role, you know exactly what each of them can do and how to adjust all of them at once.
Benefit: less security debt
In the development world we talk constantly about tech debt, code that goes stale and gets hard to manage. I would argue security debt is just as real.
It builds up when you do not have this under control:
- Individual users that are outdated or belong to people who left
- Random tool accounts whose original purpose nobody remembers
- Permissions that exist for reasons no one can explain
The root cause is the same in each case. There is no overall structure of security groups aligned to the architecture design.
With a clear strategy you simply incur less of it. Access is assigned to groups, the groups match the design, and cleanup stays manageable.
Benefit: clarity
Well defined roles make things clear for everyone on the team, especially whoever is responsible for managing security.
The idea is that the roles make sense in the context of what the team actually does. If you have daily refreshes and CI/CD processes, a role named automation maps to them directly.
The alternative is poorly defined roles that do not align with the architecture. Maybe there is an internal convention, and maybe it is outdated and nobody refers to it that way anymore.
It is a simple difference. Roles that make immediate sense make the whole architecture easier to work on.
Less is more
The rule of thumb is the principle of least privilege: give users only the access they need and nothing else. Again, not to be difficult, but to be responsible with what people can see.
The menu problem
Think about walking into a restaurant with an enormous menu. Too many options and choosing gets harder, not easier.
Data works the same way. Give stakeholders every table because you think it helps, and you may be handing them decision fatigue instead.
They do not know which one to use or what the difference is, so they use none of them. Give them a limited, curated set and they use it more, because they trust they picked the right one.
That is as much about their experience as it is about security. You are being helpful and being responsible with the data you were trusted to maintain.
Start small and add on
It is almost always easier to add access as needed than to take it away. Taking it back is a conversation. Granting it is a line in a script.
So start small and expand slowly. Better for your team, and better from a security and data governance perspective.
Key terms
Security debt
The accumulation of outdated users, forgotten tool accounts and unexplained permissions that builds up when access is granted case by case.
Principle of least privilege
Giving each user or system only the access it needs to do its job, and nothing beyond that.
Landing zone
The part of the warehouse where external source data first arrives, and the first place to apply dedicated roles.
Presentation layer
The marts and views you expose to stakeholders, often split by department or customer so access can follow those boundaries.
Decision fatigue
What stakeholders experience when you expose too many tables at once, which makes them use the data less rather than more.
Common questions
Is data security really a design problem, not just a permissions problem?
Both, and the design part is the one teams skip. If your schemas, role names and deployment process are planned together, permissions become obvious. If they are not, you end up writing custom grants to paper over a layout that was never designed for access boundaries.
What is security debt?
It is the security equivalent of tech debt: stale users, tool accounts nobody can account for, and permissions that exist for forgotten reasons. It accumulates when access is granted one request at a time instead of through groups that match the architecture.
Should developers be able to deploy to production?
I prefer no human user deploying to production at all. Developers keep read visibility so they are never blocked, and an automation role handles the deploy. That way a mistake in local development cannot become a production incident.
How much data should I expose to stakeholders?
As little as they need to make their decisions. More options often means less usage, because people cannot tell which table is the right one. A curated presentation layer gets used more than a wide open warehouse.
Where should I start if we have nothing in place?
Start at the two ends of the pipeline: a dedicated role for ingestion and a restricted presentation layer. Those are the highest risk and the easiest to reason about. The development workflow comes next.
Is it bad to grant more access later?
Not at all, and that is the point of starting small. Adding access when a genuine need appears is simple. Removing access that people already have is the hard conversation.
Related reading
- The 4-Role Security Model for Your Data Warehouse
- Secure Your Data Warehouse w/ 4 Simple Roles
- The Risks of Lazy Database Roles
- The True Value of a Data Presentation Layer
Final takeaway
When I review an architecture with a data team, security is rarely a separate conversation. It is the same conversation as naming, schemas and deployment, and teams that design the three together spend far less time cleaning up later.
Additional Free Resources
Starter Guides & Checklists
Explore additional free resources built on the same patterns I use with real clients so you can build your own with structure and confidence. Topics include data architecture, modeling and more specifically for small data teams.