K. Brian Kelley
Brian Kelley is an author, columnist, Certified Information Systems Auditor (CISA), and former Microsoft Data Platform (SQL Server) MVP (2009-2016) focusing primarily on SQL Server and Windows security. Brian currently serves as a data architect as well as an independent infrastructure/security architect concentrating on Active Directory, SQL Server, and Windows Server. He has served in a myriad of other positions including senior database administrator, data warehouse architect, web developer, incident response team lead, and project manager. Brian has spoken at 24 Hours of PASS, IT/Dev Connections, SQLConnections, the Techno Security and Forensics Investigation Conference, the IT GRC Forum, SyntaxCon, and at various SQL Saturdays, Code Camps, and user groups.
2017 Awards
2015 Awards
2014 Awards
2013 Awards
2011 Awards
2009 Awards
2017 Awards

2015 Awards

2014 Awards

2013 Awards

2011 Awards

2009 Awards

Auditing and Compliance
- Audit SQL Server Logins without filling up the Error Log (last update: 10/27/2017)
- Auditing Failed Logins in SQL Server (last update: 4/22/2009)
- Auditing SELECT statements in SQL Server 2008 (last update: 12/18/2008)
- Auditing SQL Server 2012 Server Roles (last update: 11/14/2012)
- Auditing SQL Server Password Age (last update: 5/11/2011)
- Auditing SQL Server Permissions and Roles for the Server (last update: 6/29/2010)
- Auditing SQL Server User and Role Permissions for Databases (last update: 10/20/2010)
- Auditing sysadmin on multiple servers using PowerShell (last update: 1/23/2012)
- Automate collection and saving of failed logins for SQL Server (last update: 5/13/2009)
- How to Audit Login Changes on a SQL Server (last update: 7/30/2012)
- Identifying What Runs at Startup on SQL Server (last update: 1/30/2012)
- Pass Server Security Audits Easily with SQL Compliance Manager (last update: 1/17/2017)
- SQL Server Encryption To Block DBAs Data Access (last update: 12/19/2012)
- SQL Server Security Auditing to Match Logins And Users (last update: 8/13/2010)
- Tables and Views for Auditing SQL Server Logins (last update: 5/24/2010)
- Using a Backup to Find SQL Server Security Changes (last update: 9/11/2012)
- What to Audit at the SQL Server Instance Level (last update: 7/30/2013)
- What Windows Server Groups Should I Audit on my SQL Servers? (last update: 10/23/2014)
Backup
- How to Identify and Backup the Latest SQL Server Database in a Series (last update: 11/20/2012)
- The Statement Backup Log is Not Allowed for a SQL Server Transaction Log Backup (last update: 3/15/2019)
Clustering
- Understanding why there is still downtime for SQL Server with Microsoft Clustering (last update: 11/17/2009)
Contained Databases
- How to Audit for SQL Server Users in Contained Databases (last update: 4/11/2014)
Database Administration
- Determining Drive Letters in Use by SQL Server Databases (last update: 9/16/2013)
- How to move a SQL Server database within the same instance without losing settings (last update: 2/16/2009)
Database Configurations
- Verify Connectivity to SQL Server (last update: 4/25/2017)
Database Design
- Data Modeling: Understanding First Normal Form in SQL Server (last update: 8/16/2018)
- Dealing with a No NULL Requirement for Data Modeling in SQL Server (last update: 1/28/2020)
- Understanding First Normal Form in SQL Server (last update: 6/28/2011)
Disaster Recovery
- Disaster Recovery Planning for Microsoft SQL Server - Getting Backups and Restores Right (last update: 5/22/2013)
- Retrieving SQL Server Server Roles for Disaster Recovery (last update: 3/22/2015)
- Scripting SQL Server Database Owners for Disaster Recovery (last update: 12/30/2015)
Dynamic Management Views and Functions
- Return SQL Server Connections Information Using sys.dm_exec_connections (last update: 5/18/2018)
- SQL Server Case Sensitive Collations and DMVs (last update: 3/22/2013)
Encryption
- Finding Encrypted Data in a SQL Server Database (last update: 1/14/2015)
- SQL Server Encryption Symmetric vs. Asymmetric Keys (last update: 11/23/2009)
- Using authenticators with SQL Server encryption (last update: 5/27/2009)
- Where Does SQL Server Store Its Certificates (last update: 4/26/2016)
Functions - System
- Understanding and Using SQL Server sys.dm_exec_requests (last update: 6/20/2018)
- Understanding and Using sys.dm_exec_sessions in SQL Server (last update: 6/6/2018)
Hardware
- How to Monitor Storage Performance with a Single Application (last update: 2/25/2021)
Integration Services Import and Export Wizard
- Export data to an earlier SQL Server version (last update: 4/25/2012)
Linked Servers
- On demand creation and destruction of a SQL Server Linked Server (last update: 9/25/2009)
- On Demand Linked Server Creation with a SQL Server Login (last update: 10/14/2009)
Monitoring
- SQL Server Forensics Analysis Based on Database Backup Size (last update: 7/15/2019)
Performance Tuning
- SQL Server Implicit Conversions Performance Issues (last update: 10/23/2019)
Policy Based Management
- SQL Server Policy Management to Enforce Database Settings in Development (last update: 7/15/2010)
PowerShell
- Parsing all the files in a directory using PowerShell (last update: 8/22/2012)
Professional Development Books
- New Book Introduction To SQL Server (last update: 3/14/2011)
Profiler and Trace
- Using the Default Trace in SQL Server (last update: 4/28/2009)
Reporting Services Dynamic Reports
- Getting started with report filters in SQL Server Reporting Services (last update: 12/23/2009)
Restore
- How to Automate SQL Server Restores for a Test Server (last update: 12/11/2012)
- Recovering a SQL Server TDE Encrypted Database Successfully (last update: 4/1/2015)
- Why Can't I Restore a Database to an Older Version of SQL Server? (last update: 4/17/2012)
Scripts
- Script SQL Server Logins for Disaster Recovery (last update: 6/18/2015)
Security
- Add a Salt with the SQL Server HASHBYTES Function (last update: 7/25/2014)
- Application Database Security Design - Part 1 - Authentication for SQL Server (last update: 3/3/2017)
- Application Database Security Design Part 2 - Multiple Levels of Access to SQL Server (last update: 1/10/2018)
- Auditing Critical Windows Files and Folders for SQL Server (last update: 9/8/2014)
- Automated way to get all port information for SQL Server instances (last update: 3/9/2015)
- Best Practices to Secure the SQL Server sa Account (last update: 8/18/2015)
- Blocking SQL Server db_datareader, db_datawriter, and db_owner Permissions (last update: 3/6/2013)
- Breaking ownership chaining within a schema in SQL Server (last update: 8/11/2009)
- Can I stop a System Admin from enabling SQL Server xp_cmdshell? (last update: 7/3/2013)
- Cannot make a role a member of itself error in SQL Server (last update: 8/30/2010)
- Database level permissions for SQL Server 2005 and 2008 (last update: 3/30/2009)
- Determining Permission Issues for a SQL Server Object (last update: 9/24/2013)
- Dynamic SQL and Ownership Chaining in SQL Server (last update: 8/24/2009)
- Filtering Columns in SQL Server Using Views (last update: 9/21/2010)
- Filtering SQL Server Columns Using Column Level Permissions (last update: 9/30/2010)
- Get Back into SQL Server After You've Locked Yourself Out (last update: 3/9/2012)
- Grant limited permissions to create SQL Server views in another schema Part 1 (last update: 7/20/2009)
- Grant limited permissions to create SQL Server views in another schema Part 2 (last update: 7/27/2009)
- How come I can create SQL Server objects but not access these objects (last update: 4/9/2014)
- How to Clone a SQL Server Login, Part 1 of 3 (last update: 4/13/2015)
- How to Clone a SQL Server Login, Part 2 of 3 (last update: 5/29/2015)
- How to Clone a SQL Server Login, Part 3 of 3 (last update: 6/4/2015)
- How to configure password enforcement options for standard SQL Server logins (last update: 12/28/2009)
- How to Connect to a SQL Server Named Instance (last update: 3/22/2012)
- How to Create Secure SQL Server Service Accounts (last update: 9/28/2011)
- How to Enable Secondary Decryption of SQL Server Symmetric Keys (last update: 11/11/2013)
- How to Setup Row Level Security for SQL Server (last update: 12/17/2010)
- How to Unlock a SQL Login Without Resetting the Password (last update: 8/28/2012)
- Identify Local Administrators on a SQL Server box using PowerShell (last update: 6/15/2011)
- Identifying the Tie Between Logins and Users (last update: 5/23/2012)
- Implementing SQL Server Security with Stored Procedures and Views (last update: 9/3/2020)
- Implicit Permissions Due to Ownership Chaining or Scopes in SQL Server (last update: 11/23/2010)
- Implicit Permissions Due to SQL Server Database Roles (last update: 11/17/2010)
- Is disabling xp_cmdshell in SQL Server really secure? (last update: 9/6/2017)
- Issues Determining an Individual SQL Server User's Permissions (last update: 7/25/2012)
- Migrate the Correct Logins with a SQL Server Database (last update: 4/28/2016)
- Nesting Database Roles in SQL Server (last update: 4/7/2010)
- Network communications mechanisms for SQL Server (last update: 12/10/2010)
- New Security Catalog Views in SQL Server 2005 and SQL 2008 (last update: 12/24/2008)
- Ownership chaining in SQL Server security feature or security risk (last update: 6/23/2009)
- Potential Security Exploit Using CONTROL SERVER Permissions in SQL Server (last update: 2/24/2012)
- Practice of Using Privileged Accounts to Access SQL Server (last update: 8/7/2017)
- Protecting SQL Server from Ransomware (last update: 8/29/2017)
- Protecting the SQL Server Backup folder (last update: 9/19/2012)
- Quickly Find Failed SQL Server Logins Using the Windows Event Log (last update: 8/4/2016)
- Replace xp_cmdshell command line use with SQL Server Agent (last update: 5/19/2010)
- Retrieving SQL Server Fixed Database Roles for Disaster Recovery (last update: 2/4/2011)
- Retrieving SQL Server Permissions for Disaster Recovery (last update: 10/27/2010)
- Server level permissions for SQL Server 2005 and SQL Server 2008 (last update: 3/24/2009)
- Skip-2.0 Malware Impacts SQL Server - Should I Be Worried? (last update: 10/24/2019)
- SQL Server nested securable permissions (last update: 4/13/2010)
- SQL Server Permissions Granted to All Users By Default (last update: 3/28/2016)
- SQL Server Security Community Questions on Windows, Server Level, Database, Roles and more (last update: 8/6/2013)
- The Power of the SQL Server Database Owner (last update: 3/15/2013)
- Unable to see a SQL Server table (last update: 5/18/2011)
- Understanding Cross Database Ownership Chaining in SQL Server (last update: 6/29/2009)
- Understanding GRANT, DENY, and REVOKE in SQL Server (last update: 2/27/2013)
- Understanding How A User Gets Database Access in SQL Server (last update: 6/14/2010)
- Understanding how SQL Server handles Service Isolation (last update: 11/26/2013)
- Understanding SQL Server fixed database roles (last update: 12/14/2009)
- Understanding SQL Server fixed server roles (last update: 11/24/2009)
- Understanding SQL Server Ownership Chaining (last update: 4/9/2020)
- Understanding the importance of key length with the SQL Server asymmetric encryption algorithms (last update: 7/23/2013)
- Understanding the SQL Server HASHBYTES hashing algorithms (last update: 7/11/2013)
- Understanding the SQL Server Symmetric Encryption Algorithms (last update: 7/19/2013)
- Understanding When SQL Server Kerberos Delegation is Needed (last update: 2/22/2011)
- Using nmap to scan for SQL Servers on a network (last update: 8/16/2012)
- Using PowerShell to Audit for Blank SA Passwords (last update: 9/4/2012)
- Using Views to Expose Encrypted Data in SQL Server (last update: 10/21/2013)
- Why Can't I Set a Default SQL Server Schema for My Windows Group Login? (last update: 5/29/2012)
- Why System Account is a bad idea for SQL Server Service Account (last update: 5/25/2011)
SQL Injection
- Using Triggers to Mitigate Some SQL Injection Effects (last update: 11/19/2013)
SQL Server Agent
- Auditing for New SQL Server Agent Jobs (last update: 9/22/2017)
- Configuring Critical SQL Server Alerts (last update: 10/29/2014)
- Script to find failed SQL Server Backups and validate re-running code was successful (last update: 11/1/2017)
- SQL Server Agent Job Email Notifications via PowerShell (last update: 12/27/2012)
- Suppressing SQL Server Alerts to Reduce Emails (last update: 2/17/2016)
- Understanding how SQL Server Agent Jobs can share schedules (last update: 3/18/2015)
SQL Server Configurations
- Catalog SQL Server Services Installed on Servers (last update: 12/17/2014)
- How to setup and use a SQL Server alias (last update: 11/5/2008)
- How to setup security features for SQL Server (last update: 1/15/2009)
- Understanding the SQL Server SELECT @@VERSION command (last update: 12/13/2011)
- Using Friendly Names for SQL Servers via DNS (last update: 3/28/2012)
- Why listing all of your SQL Servers does not always work (last update: 7/9/2010)
Surface Area Configuration Manager
- SQL Server security settings using the Surface Area Configuration tool (last update: 1/22/2009)
- SQL Server Surface Area Configuration for Features Option Selection (last update: 2/11/2009)
T-SQL
- Minimum Permissions for SQL Server TRUNCATE TABLE (last update: 12/1/2015)
Triggers
- Connecting to SQL Server with a Bad Logon Trigger (last update: 11/20/2008)
- SQL Server 2005 SysAdmin Login Auditing (last update: 11/14/2008)
- Understanding SQL Server inserted and deleted tables for DML triggers (last update: 3/22/2011)
Views
- Why You Should Avoid SELECT * in SQL Server T-SQL Code (last update: 12/10/2015)
Virtualization
- Viewing VMware Counters in PerfMon for SQL Server (last update: 11/7/2012)