Database Engine Security Checklist: Limit Access to Data
This checklist helps you review how you limit access to data in your organization. Use this checklist to periodically audit how users access information stored in the SQL Server Database Engine.
Access to the Instance of SQL Server
These items relate to the entire instance of the Database Engine.
... |
Description |
|
Have you granted access through Windows groups for most logins? |
|
Have you removed unnecessary or obsolete logins from the Database Engine? |
|
Have you implemented the principle of least privilege? |
|
To view system metadata without conferring additional permissions, have you granted the VIEW DEFINITION permission selectively at the object, schema, database, or server level? |
|
Have you replaced remote servers with linked servers? |
|
If pass-through authentication to a linked server is necessary have you constrained delegation? |
|
Have you disabled ad hoc queries through servers (unless needed)? |
Managing User Identity
These items relate to settings on each database.
... |
Description |
|
Is the guest user account disabled in every database unless required for anonymous users? |
|
Do users only have access to necessary databases? |
|
Have most users been granted access through SQL Server roles? |
|
Does the SQL Server Agent use credentials to execute job steps that require specific privileges rather than adjusting the privileges of the SQL Server Agent service account? |
|
If a SQL Server Agent user needs to execute a job that requires different Windows credentials, have you assigned them a proxy account that has just enough permissions to accomplish the task? |
|
Do you encapsulate access to database objects within modules such as stored procedures, functions, triggers, or assemblies? |
|
In modules, have you explicitly set an execution context rather than using the default context? |
|
Are modules signed to inhibit tampering? |
|
Do you use USER WITHOUT LOGIN instead of application roles? |
|
Do you use EXECUTE AS instead of SETUSER? |
|
Have you replaced application roles with EXECUTE AS? |
Object Access
These items relate to accessing database objects.
... |
Description |
|
Are the public server and database roles granted few (if any) permissions? |
|
Are similar database objects grouped together into the same schema? |
|
Do you manage database object security by setting ownership and permissions at the schema level? |
|
Do you have distinct owners for schemas instead of having all schemas owned by dbo? |
|
Do you use code signing of procedural code if additional privileges are required for the procedure? |
|
Is the TRUSTWORTHY database option set to OFF? |
|
Do modules take steps to prevent SQL Injection? |
|
If ad-hoc access to the data base is permitted (instead of encapsulating access within modules), are applications taking measures to prevent SQL Injection?
|
Auditing Access
... |
Description |
|
Is auditing scenario-specific? |
|
Is login auditing configured to retain a record of failed logins? |
|
Do you audit both successful logins and unsuccessful logins if you store highly sensitive data? |
|
Do you audit DDL, DML, and specific server events by using SQL Server audit or trace events? |
|
Do you use WMI to be alerted of emergency events? |
|
Do you enable C2 auditing or Common Criteria compliance only if required? |
See Also
Other Security Checklists
- Database Engine Security Checklist: Enhancing the Security of Database Engine Connections
- Database Engine Security Checklist: Encrypting Sensitive Data
- Database Engine Security Checklist: Database Engine Security Configuration