- SQL Server Reference Guide
- Introduction
- SQL Server Reference Guide Overview
- Table of Contents
- Microsoft SQL Server Defined
- SQL Server Editions
- SQL Server Access
- Informit Articles and Sample Chapters
- Online Resources
- Microsoft SQL Server Features
- SQL Server Books Online
- Clustering Services
- Data Transformation Services (DTS) Overview
- Replication Services
- Database Mirroring
- Natural Language Processing (NLP)
- Analysis Services
- Microsot SQL Server Reporting Services
- XML Overview
- Notification Services for the DBA
- Full-Text Search
- SQL Server 2005 - Service Broker
- Using SQL Server as a Web Service
- SQL Server Encryption Options Overview
- SQL Server 2008 Overview
- SQL Server 2008 R2 Overview
- SQL Azure
- The Utility Control Point and Data Application Component, Part 1
- The Utility Control Point and Data Application Component, Part 2
- Microsoft SQL Server Administration
- The DBA Survival Guide: The 10 Minute SQL Server Overview
- Preparing (or Tuning) a Windows System for SQL Server, Part 1
- Preparing (or Tuning) a Windows System for SQL Server, Part 2
- Installing SQL Server
- Upgrading SQL Server
- SQL Server 2000 Management Tools
- SQL Server 2005 Management Tools
- SQL Server 2008 Management Tools
- SQL Azure Tools
- Automating Tasks with SQL Server Agent
- Run Operating System Commands in SQL Agent using PowerShell
- Automating Tasks Without SQL Server Agent
- Storage – SQL Server I/O
- Service Packs, Hotfixes and Cumulative Upgrades
- Tracking SQL Server Information with Error and Event Logs
- Change Management
- SQL Server Metadata, Part One
- SQL Server Meta-Data, Part Two
- Monitoring - SQL Server 2005 Dynamic Views and Functions
- Monitoring - Performance Monitor
- Unattended Performance Monitoring for SQL Server
- Monitoring - User-Defined Performance Counters
- Monitoring: SQL Server Activity Monitor
- SQL Server Instances
- DBCC Commands
- SQL Server and Mail
- Database Maintenance Checklist
- The Maintenance Wizard: SQL Server 2000 and Earlier
- The Maintenance Wizard: SQL Server 2005 (SP2) and Later
- The Web Assistant Wizard
- Creating Web Pages from SQL Server
- SQL Server Security
- Securing the SQL Server Platform, Part 1
- Securing the SQL Server Platform, Part 2
- SQL Server Security: Users and other Principals
- SQL Server Security – Roles
- SQL Server Security: Objects (Securables)
- Security: Using the Command Line
- SQL Server Security - Encrypting Connections
- SQL Server Security: Encrypting Data
- SQL Server Security Audit
- High Availability - SQL Server Clustering
- SQL Server Configuration, Part 1
- SQL Server Configuration, Part 2
- Database Configuration Options
- 32- vs 64-bit Computing for SQL Server
- SQL Server and Memory
- Performance Tuning: Introduction to Indexes
- Statistical Indexes
- Backup and Recovery
- Backup and Recovery Examples, Part One
- Backup and Recovery Examples, Part Two: Transferring Databases to Another System (Even Without Backups)
- SQL Profiler - Reverse Engineering An Application
- SQL Trace
- SQL Server Alerts
- Files and Filegroups
- Partitioning
- Full-Text Indexes
- Read-Only Data
- SQL Server Locks
- Monitoring Locking and Deadlocking
- Controlling Locks in SQL Server
- SQL Server Policy-Based Management, Part One
- SQL Server Policy-Based Management, Part Two
- SQL Server Policy-Based Management, Part Three
- Microsoft SQL Server Programming
- An Outline for Development
- Database
- Database Services
- Database Objects: Databases
- Database Objects: Tables
- Database Objects: Table Relationships
- Database Objects: Keys
- Database Objects: Constraints
- Database Objects: Data Types
- Database Objects: Views
- Database Objects: Stored Procedures
- Database Objects: Indexes
- Database Objects: User Defined Functions
- Database Objects: Triggers
- Database Design: Requirements, Entities, and Attributes
- Business Process Model Notation (BPMN) and the Data Professional
- Business Questions for Database Design, Part One
- Business Questions for Database Design, Part Two
- Database Design: Finalizing Requirements and Defining Relationships
- Database Design: Creating an Entity Relationship Diagram
- Database Design: The Logical ERD
- Database Design: Adjusting The Model
- Database Design: Normalizing the Model
- Creating The Physical Model
- Database Design: Changing Attributes to Columns
- Database Design: Creating The Physical Database
- Database Design Example: Curriculum Vitae
- NULLs
- The SQL Server Sample Databases
- The SQL Server Sample Databases: pubs
- The SQL Server Sample Databases: NorthWind
- The SQL Server Sample Databases: AdventureWorks
- The SQL Server Sample Databases: Adventureworks Derivatives
- UniversalDB: The Demo and Testing Database, Part 1
- UniversalDB: The Demo and Testing Database, Part 2
- UniversalDB: The Demo and Testing Database, Part 3
- UniversalDB: The Demo and Testing Database, Part 4
- Getting Started with Transact-SQL
- Transact-SQL: Data Definition Language (DDL) Basics
- Transact-SQL: Limiting Results
- Transact-SQL: More Operators
- Transact-SQL: Ordering and Aggregating Data
- Transact-SQL: Subqueries
- Transact-SQL: Joins
- Transact-SQL: Complex Joins - Building a View with Multiple JOINs
- Transact-SQL: Inserts, Updates, and Deletes
- An Introduction to the CLR in SQL Server 2005
- Design Elements Part 1: Programming Flow Overview, Code Format and Commenting your Code
- Design Elements Part 2: Controlling SQL's Scope
- Design Elements Part 3: Error Handling
- Design Elements Part 4: Variables
- Design Elements Part 5: Where Does The Code Live?
- Design Elements Part 6: Math Operators and Functions
- Design Elements Part 7: Statistical Functions
- Design Elements Part 8: Summarization Statistical Algorithms
- Design Elements Part 9:Representing Data with Statistical Algorithms
- Design Elements Part 10: Interpreting the Data—Regression
- Design Elements Part 11: String Manipulation
- Design Elements Part 12: Loops
- Design Elements Part 13: Recursion
- Design Elements Part 14: Arrays
- Design Elements Part 15: Event-Driven Programming Vs. Scheduled Processes
- Design Elements Part 16: Event-Driven Programming
- Design Elements Part 17: Program Flow
- Forming Queries Part 1: Design
- Forming Queries Part 2: Query Basics
- Forming Queries Part 3: Query Optimization
- Forming Queries Part 4: SET Options
- Forming Queries Part 5: Table Optimization Hints
- Using SQL Server Templates
- Transact-SQL Unit Testing
- Index Tuning Wizard
- Unicode and SQL Server
- SQL Server Development Tools
- The SQL Server Transact-SQL Debugger
- The Transact-SQL Debugger, Part 2
- Basic Troubleshooting for Transact-SQL Code
- An Introduction to Spatial Data in SQL Server 2008
- Performance Tuning
- Performance Tuning SQL Server: Tools and Processes
- Performance Tuning SQL Server: Tools Overview
- Creating a Performance Tuning Audit - Defining Components
- Creating a Performance Tuning Audit - Evaluation Part One
- Creating a Performance Tuning Audit - Evaluation Part Two
- Creating a Performance Tuning Audit - Interpretation
- Creating a Performance Tuning Audit - Developing an Action Plan
- Understanding SQL Server Query Plans
- Performance Tuning: Implementing Indexes
- Performance Monitoring Tools: Windows 2008 (and Higher) Server Utilities, Part 1
- Performance Monitoring Tools: Windows 2008 (and Higher) Server Utilities, Part 2
- Performance Monitoring Tools: Windows System Monitor
- Performance Monitoring Tools: Logging with System Monitor
- Performance Monitoring Tools: User Defined Counters
- General Transact-SQL (T-SQL) Performance Tuning, Part 1
- General Transact-SQL (T-SQL) Performance Tuning, Part 2
- General Transact-SQL (T-SQL) Performance Tuning, Part 3
- Performance Monitoring Tools: An Introduction to SQL Profiler
- Performance Tuning: Introduction to Indexes
- Performance Monitoring Tools: SQL Server 2000 Index Tuning Wizard
- Performance Monitoring Tools: SQL Server 2005 Database Tuning Advisor
- Performance Monitoring Tools: SQL Server Management Studio Reports
- Performance Monitoring Tools: SQL Server 2008 Activity Monitor
- The SQL Server 2008 Management Data Warehouse and Data Collector
- Performance Monitoring Tools: Evaluating Wait States with PowerShell and Excel
- Practical Applications
- Choosing the Back End
- The DBA's Toolbox, Part 1
- The DBA's Toolbox, Part 2
- Scripting Solutions for SQL Server
- Building a SQL Server Lab
- Using Graphics Files with SQL Server
- Enterprise Resource Planning
- Customer Relationship Management (CRM)
- Building a Reporting Data Server
- Building a Database Documenter, Part 1
- Building a Database Documenter, Part 2
- Data Management Objects
- Data Management Objects: The Server Object
- Data Management Objects: Server Object Methods
- Data Management Objects: Collections and the Database Object
- Data Management Objects: Database Information
- Data Management Objects: Database Control
- Data Management Objects: Database Maintenance
- Data Management Objects: Logging the Process
- Data Management Objects: Running SQL Statements
- Data Management Objects: Multiple Row Returns
- Data Management Objects: Other Database Objects
- Data Management Objects: Security
- Data Management Objects: Scripting
- Powershell and SQL Server - Overview
- PowerShell and SQL Server - Objects and Providers
- Powershell and SQL Server - A Script Framework
- Powershell and SQL Server - Logging the Process
- Powershell and SQL Server - Reading a Control File
- Powershell and SQL Server - SQL Server Access
- Powershell and SQL Server - Web Pages from a SQL Query
- Powershell and SQL Server - Scrubbing the Event Logs
- SQL Server 2008 PowerShell Provider
- SQL Server I/O: Importing and Exporting Data
- SQL Server I/O: XML in Database Terms
- SQL Server I/O: Creating XML Output
- SQL Server I/O: Reading XML Documents
- SQL Server I/O: Using XML Control Mechanisms
- SQL Server I/O: Creating Hierarchies
- SQL Server I/O: Using HTTP with SQL Server XML
- SQL Server I/O: Using HTTP with SQL Server XML Templates
- SQL Server I/O: Remote Queries
- SQL Server I/O: Working with Text Files
- Using Microsoft SQL Server on Handheld Devices
- Front-Ends 101: Microsoft Access
- Comparing Two SQL Server Databases
- English Query - Part 1
- English Query - Part 2
- English Query - Part 3
- English Query - Part 4
- English Query - Part 5
- RSS Feeds from SQL Server
- Using SQL Server Agent to Monitor Backups
- Reporting Services - Creating a Maintenance Report
- SQL Server Chargeback Strategies, Part 1
- SQL Server Chargeback Strategies, Part 2
- SQL Server Replication Example
- Creating a Master Agent and Alert Server
- The SQL Server Central Management System: Definition
- The SQL Server Central Management System: Base Tables
- The SQL Server Central Management System: Execution of Server Information (Part 1)
- The SQL Server Central Management System: Execution of Server Information (Part 2)
- The SQL Server Central Management System: Collecting Performance Metrics
- The SQL Server Central Management System: Centralizing Agent Jobs, Events and Scripts
- The SQL Server Central Management System: Reporting the Data and Project Summary
- Time Tracking for SQL Server Operations
- Migrating Departmental Data Stores to SQL Server
- Migrating Departmental Data Stores to SQL Server: Model the System
- Migrating Departmental Data Stores to SQL Server: Model the System, Continued
- Migrating Departmental Data Stores to SQL Server: Decide on the Destination
- Migrating Departmental Data Stores to SQL Server: Design the ETL
- Migrating Departmental Data Stores to SQL Server: Design the ETL, Continued
- Migrating Departmental Data Stores to SQL Server: Attach the Front End, Test, and Monitor
- Tracking SQL Server Timed Events, Part 1
- Tracking SQL Server Timed Events, Part 2
- Patterns and Practices for the Data Professional
- Managing Vendor Databases
- Consolidation Options
- Connecting to a SQL Azure Database from Microsoft Access
- SharePoint 2007 and SQL Server, Part One
- SharePoint 2007 and SQL Server, Part Two
- SharePoint 2007 and SQL Server, Part Three
- Querying Multiple Data Sources from a Single Location (Distributed Queries)
- Importing and Exporting Data for SQL Azure
- Working on Distributed Teams
- Professional Development
- Becoming a DBA
- Certification
- DBA Levels
- Becoming a Data Professional
- SQL Server Professional Development Plan, Part 1
- SQL Server Professional Development Plan, Part 2
- SQL Server Professional Development Plan, Part 3
- Evaluating Technical Options
- System Sizing
- Creating a Disaster Recovery Plan
- Anatomy of a Disaster (Response Plan)
- Database Troubleshooting
- Conducting an Effective Code Review
- Developing an Exit Strategy
- Data Retention Strategy
- Keeping Your DBA/Developer Job in Troubled Times
- The SQL Server Runbook
- Creating and Maintaining a SQL Server Configuration History, Part 1
- Creating and Maintaining a SQL Server Configuration History, Part 2
- Creating an Application Profile, Part 1
- Creating an Application Profile, Part 2
- How to Attend a Technical Conference
- Tips for Maximizing Your IT Budget This Year
- The Importance of Blue-Sky Planning
- Application Architecture Assessments
- Transact-SQL Code Reviews, Part One
- Transact-SQL Code Reviews, Part Two
- Cloud Computing (Distributed Computing) Paradigms
- NoSQL for the SQL Server Professional, Part One
- NoSQL for the SQL Server Professional, Part Two
- Object-Role Modeling (ORM) for the Database Professional
- Business Intelligence
- BI Explained
- Developing a Data Dictionary
- BI Security
- Gathering BI Requirements
- Source System Extracts and Transforms
- ETL Mechanisms
- Business Intelligence Landscapes
- Business Intelligence Layouts and the Build or Buy Decision
- A Single Version of the Truth
- The Operational Data Store (ODS)
- Data Marts – Combining and Transforming Data
- Designing Data Elements
- The Enterprise Data Warehouse — Aggregations and the Star Schema
- On-Line Analytical Processing (OLAP)
- Data Mining
- Key Performance Indicators
- BI Presentation - Client Tools
- BI Presentation - Portals
- Implementing ETL - Introduction to SQL Server 2005 Integration Services
- Building a Business Intelligence Solution, Part 1
- Building a Business Intelligence Solution, Part 2
- Building a Business Intelligence Solution, Part 3
- Tips and Troubleshooting
- SQL Server and Microsoft Excel Integration
- Tips for the SQL Server Tools: SQL Server 2000
- Tips for the SQL Server Tools – SQL Server 2005
- Transaction Log Troubles
- SQL Server Connection Problems
- Orphaned Database Users
- Additional Resources
- Tools and Downloads
- Utilities (Free)
- Tool Review (Free): DBDesignerFork
- Aqua Data Studio
- Microsoft SQL Server Best Practices Analyzer
- Utilities (Cost)
- Quest Software's TOAD for SQL Server
- Quest Software's Spotlight on SQL Server
- SQL Server on Microsoft's Virtual PC
- Red Gate SQL Bundle
- Microsoft's Visio for Database Folks
- Quest Capacity Manager
- SQL Server Help
- Visual Studio Team Edition for Database Professionals
- Microsoft Assessment and Planning Solution Accelerator
- Aggregating Server Data from the MAPS Tool
As I mentioned in the last tutorial in this series, security in the context of SQL Server deals with multiple areas including the physical access to the system, the operating system, the platform (SQL Server and its configuration), Principals (users) and Securables (database objects), and programmatic elements like Transact-SQL code. In this two-part series, I'm covering the platform in more detail. If you have not had a chance to look over part one of this series, take a moment and do that now.
I mentioned in the last article that you should always test code, tools and processes you read here (or anywhere) on a lab system and understand the effects before you try anything in production. It's worth repeating that here — so make sure you fire up that Virtual Machine to follow along with the settings and so on you have in your system.
SQL Server Configuration Manager
In the last tutorial I mentioned the Microsoft Baseline Security Analyzer (MBSA) and how you can use that tool to scan for known issues at the Operating System and a few items in the SQL Server Platform that you can examine to tighten your security.
I also opened the SQL Server Configuration Manager (SCM) tool, and I left off at the point where I showed you the user settings. Again, always use the SCM tool to change or configure the user accounts for SQL Server Services — the tool does more than just change the password as I described there.
Opening the SCM tool, you'll notice below the user accounts are two sections that deal with networking for SQL Server. This is the next area to review for security.
Notice that there are two areas here — one for the server protocols, and the other for the client. When you install SQL Server and the Client Tools on a system, it acts as both a server and a client. The protocols are treated differently, and have different security aspects.
Starting with the server side, only enable the protocols you need. Check the configuration requirements of the programs and users that access the database, and set as few protocols to be on as possible. I normally use two: Shared Memory and TCP/IP. Shared Memory is used to communicate from the same system where the client and the server are installed. In production, you may or may not want to enable this communication mechanism. It's fairly secure, unless someone gains access to your server. Of course, in that case you have other issues to worry about.
The TCP/IP protocol is a subject all by itself. If you are not familiar with at least the basics of how this protocol works, make sure you bookmark this link for a review later: http://www.informit.com/articles/article.aspx?p=26014&seqNum=9
If you enable the TCP/IP protocol, the important thing to keep in mind is the Port the TCP/IP protocol will use. At the risk of generalizing a bit, let me explain why this is important.
TCP/IP is actually two protocols: Transmission Control Protocol (TCP) and Internet Protocol (IP). TCP is used at the lower levels of communication for a computer network. Using an address number, it finds your network card like a mail carrier finds a house. Once there, however, different operations are supported by the network. To separate these operations, TCP uses another number, called a Port. This is the number you see for SQL Server if you double-click the TCP/IP protocol in SCM.
This is where things get a little more complicated. You can set this number to any port number that isn't already used. You can find a list of the reserved ports here: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers. By default, SQL Server uses port 1433. So to be secure, since that's a well-known number, you might want to change it to something else. However — do NOT do that without checking with the client programs first. You will need a way to specify for each one for the port you changed the server to listen on.
If you are running the SQL Browser Service (which uses TCP port 1434), it will automatically route any calls to a Named Instance of SQL Server running on your server to the proper port. This is very handy, but can also be a security concern. If you've changed your ports for security reasons, but you are using the Browser Service, you might not get the results you want. It's not that the SQL Browser is insecure — it's just that it routes requests, so you should understand what it does to make sure you're as secure as you like. You can read more about that here: http://technet.microsoft.com/en-us/library/ms181087.aspx
All settings you change here in this panel won't take effect until you stop and start the services, but the tool tells you this. Also note that you can change settings for all Instances installed on your system.
Moving to the client protocols, once again you want to enable only the protocols that are applicable to your system. If the client tools are installed on another system, then you should have the SCM tool available there for these settings as well. You'll notice that there is a difference in the client portion of this tool — it has an order for the protocols. Typically you only need one protocol enabled on a client, so the order is immaterial, but if you do have multiple protocols, set the one that is used most often to the top of the stack. The reason that the client has an order but the server does not is that the server will listen to whatever protocol is enabled — there's no preference for a request.
SQL Server Management Studio — Server Properties
I'll move to the next tool you can use to secure SQL Server. Again, remember that there are other layers to consider for Security, such as using the latest versions, updates and hotfixes for your system, employing firewalls, and making sure you follow best practices. In this tutorial I'm covering SQL Server itself, and I'll get to those other layers in subsequent articles.
SQL Server Management Studio (SSMS) is a graphical tool you can use to manage your Instances. You can do almost everything graphically that you can do through SQL Server commands, and vice-versa, but I recommend a graphical tool for security, especially for when you are new to the platform. Graphical tools (if properly coded) provide a great mechanism for discovering settings.
I've opened SSMS, and right-clicked the Instance name in the left-hand Object Browser pane. From there I selected “Properties” to bring up this menu.
There are a few settings that control security for an Instance, but you can see I've selected the Security panel first. This is where you can set how the user accounts are handled within the Instance. You have the option of allowing SQL Server to create and manage accounts that are not found in Windows, or only allowing Windows accounts to access SQL Server.
It's true that you have a lot of control over Windows accounts, specifically if you are using Active Directory. But it is not true that the SQL Server accounts are more insecure than a Windows account. It's more that the Windows accounts have that level of control that makes the effect of the control a more secure environment. In any case, your users determine which mode you choose — use Windows accounts if you can, and SQL Server accounts if you need to do that.
Be aware that if you do use SQL Server accounts, you need to ensure that you use complex passwords and that they are rotated frequently. Starting back in SQL Server 2005, you can enforce some of the local Windows account policies for the SQL Server accounts.
Depending on how much attention you are paying to the Windows Security Activity Logs, set the auditing accordingly. I tend to audit for failed logins, and look for suspicious activity there. If you see multiple failed attempts — even if they are from different accounts — you should investigate why. This is often overlooked in the DBA's daily routine, but should be carefully watched.
The rest of the options on this panel are beyond the scope of this article. If you are in fact using C2 or Common Criteria computing, you should read up on those topics deeply. There are quite a few things you need to do other than checking these boxes to make your system have that level of security.
Unless you have to, do not enable Cross database ownership chaining. This can be a security issue — if you are instructed to enable it, make sure you completely understand why.
There are other security settings in this tool, specifically under the Connections panel. There's a setting there that might be a little confusing. The “Allow Remote Connections” does not mean that you are allowing people to log in to the server. It actually means that you are allowing remote stored procedures to call into the server. If you need that option, once again, understand the reasons. Otherwise, leave it off.
In the Advanced and other panels, you may not notice some of the security vectors. In the panels that deal with file locations, make sure no one has access to the files.
One final aspect of securing SQL Server that I have not dealt with here is Encryption. This helps prevent access to the data even if someone does manage to intercept the data stream or grab the files from the hard drive. I've explained a few of these options here, so read that overview for more information. I also have other articles here on InformIT that will demonstrate encryption techniques.
Now that you've completed this overview on security for the SQL Server platform, here's some homework. Read through and bookmark these resources, and make sure everyone on your team does that as well. Security is one of our most important duties.
http://technet.microsoft.com/en-us/library/bb283235.aspx