
Follow the principle of least privilege when creating database access for applications.
If an application only needs to read data, don’t give it db_datawriter, db_ddladmin, or—worst of all—db_owner.
For example, instead of:
ALTER ROLE db_owner ADD MEMBER [MyApplicationUser];
create a dedicated role with only the required permissions:
CREATE ROLE app_readonly;
GRANT SELECT ON SCHEMA::dbo TO app_readonly;
ALTER ROLE app_readonly ADD MEMBER [MyApplicationUser];
The exact permissions should match what the application actually needs.
Short Explanation
A common database security mistake is:
“Give the application broad permissions so it doesn’t encounter permission errors.”
It may solve the immediate problem—but creates a much bigger security risk.
If application credentials are compromised, an overly privileged database user could potentially:
- Read sensitive data
- Modify business data
- Delete objects or records
- Execute unauthorized operations
- Change database structures
Least privilege limits the potential impact.
Real-World Example
Imagine an employee portal that only displays employee information.
The application performs:
SELECT EmployeeName, Department
FROM dbo.Employee;
It doesn’t need to:
- Create tables
- Drop tables
- Modify stored procedures
- Delete employee records
- Update financial information
So giving it db_owner is unnecessary.
A better design is:
Application
↓
Dedicated database user
↓
app_readonly role
↓
SELECT permission
↓
Required schema
If the application later needs to execute specific stored procedures, grant EXECUTE only where required rather than opening up the entire database.
Why It Matters
Security isn’t just about preventing unauthorized users from connecting.
It’s also about limiting what an authenticated identity can do.
A compromised application account with SELECT access is very different from a compromised account with db_owner.
Less privilege = smaller attack surface.
Pro Tip
Don’t design permissions around:
“What permissions make the application work?”
Design them around:
“What is the minimum permission required for this application to perform its job?”
For production environments, periodically review database principals and permissions. Application requirements also change over time, so permissions that were appropriate two years ago may no longer be necessary.
Important DBA Reminder
Avoid blindly granting permissions directly to users everywhere.
A cleaner approach is usually:
User/Service Identity → Database Role → Required Permissions
This makes permissions easier to audit, maintain, and revoke.
Also distinguish between human users and application identities. They often have very different access requirements.
Read more articles on SQL server & Azure SQL
Top 50 Azure SQL Data Security Interview Questions and Answers (Beginner to Advanced)
SQL Server Security Best Practices: From Logins to Encryption
Azure Cloud Data Security: Multi-Layered Protection Explained (IAM, Encryption, and Compliance)
Always Encrypted in Azure: Protecting Data From the People Who Manage It
What is SQL Injection and how to prevent it?
SQL Server Execution Plans Explained: A Beginner’s Guide for DBAs and Developers
Top 50 Azure SQL Execution Plan Interview Questions and Answers (Beginner to Advanced)
For Interview Questions on SQL SQL Server, Azure SQL, Performance Tuning, Security, and DBA, click the link below:-
https://www.techmixing.com/interview-questions-2
Explore the Complete TechMixing Article Sitemap – Click the Link Below
https://www.techmixing.com/site-map
Discover more from Technology with Vivek Johari
Subscribe to get the latest posts sent to your email.




