Health Checks
To allow Aireforge the ability to run health checks on servers, we recommend creating a designated Aireforge login with the permissions below enabled.
Feel free to review the permissions and their corresponding Health Checks and alter these to your requirements; a script is provided below that will set up the Aireforge login as required.
Permissions Required
CUSTOM SERVER ROLE
- Auto Close Enabled
- Auto Shrink Enabled
- Database Free Space <5%
- Database Mail Not Running
- Full Recovery Mode With No Log Backups
- Identity Column <5% Free Keys
- Query Store In Unexpected State
- Running Values Don't Match Config Values
- Suspect Pages Found
- Transaction Log Has <5% Free
- VIEW SERVER STATE
- Missing Indexes
- More tempdb Data Files Than Cores
- Deadlocks Occurred
- Maximum Memory Greater Than Available
- High Memory Usage
- IO Stalls - sysdatabases (Requires CONNECT DATABASE for other databases)
- AlwaysOn Replication Falling Behind - sysdatabases (Requires CONNECT DATABASE for other databases)
CONNECT ANY DATABASE
- Disabled Indexes
- Identity Column Less Than 10% Free Keys
- Database Less Than 10% Free
- Transaction Log Less Than 10% Free
- IO Stalls
- Query Store in an unexpected state
- Untrusted FKs
- Untrusted Constraints
- AlwaysOn replication falling behind (Requires VIEW SERVER STATE)
- SELECT (On Database msdb Only)
- Enabled Jobs With No Schedule
- Enabled Jobs With Disabled Schedule
- Unsent Database Mail
- EXEC agent_datetime
- Failed SQL Server Agent Jobs
- EXEC XP_ReaderErrorLog
- Failed Logins
SYSADMIN SERVER ROLE
- Excessive VLFs
- Last Known DBCC CHECKDB > 30 Days
- SQL Agent Service Not Running
Script: Create Aireforge_Role
--CUSTOM SERVER ROLE (minimum privileges)
USE [master]
GO
CREATE LOGIN [Aireforge_user]
WITH PASSWORD = N'CHANGEME',
DEFAULT_DATABASE = [master],
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF
GO
CREATE SERVER ROLE [Aireforge_Role] AUTHORIZATION sa;
GO
ALTER SERVER ROLE [Aireforge_Role] ADD MEMBER [Aireforge_user];
GO
--SELECT (on msdb only)
USE [msdb]
GO
CREATE USER [Aireforge_user] FOR LOGIN [Aireforge_user]
GO
CREATE ROLE [db_Aireforge_Role] AUTHORIZATION sa;
GO
ALTER ROLE [db_Aireforge_Role] ADD MEMBER [Aireforge_user];
GO
GRANT SELECT TO [db_Aireforge_Role]
GO
--EXEC agent_datetime
use [msdb]
grant exec on agent_datetime to [db_Aireforge_Role]
GO
--VIEW SERVER STATE
use [master]
GRANT VIEW SERVER STATE TO [Aireforge_Role]
GO
--EXEC XP_ReaderErrorLog
use [master]
go
create user [Aireforge_user] for login [Aireforge_user]
GO
grant exec on xp_readerrorlog to [Aireforge_user]
GO
--CONNECT TO ANY DATABASE
GRANT CONNECT ANY DATABASE TO [Aireforge_Role]
GO
--SYSADMIN SERVER ROLE
EXEC master..sp_addsrvrolemember @loginame = N'Aireforge_user',
@rolename = N'sysadmin'
GO