- 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
Security in the context of SQL Server deals with multiple areas, including the physical systems, the operating system and environment (or “platform”), SQL Server, users and roles, the SQL Server objects (such as tables and views) and code you write for SQL Server.
In this overview, I'll introduce these areas, and in other tutorials I'll cover the specifics of each. It helps to look security this way, since each of the parts of SQL Server security deal with different aspects, tools, concerns and approaches. Each of these elements in security forms a hierarchy. In other words, an element depends on the one previous to it. If you leave the door open to the server room, for instance, then someone can just steal your server and access the files directly. All of your other security is compromised by simply ignoring the lowest level.
It's also helpful to think of the security hierarchy this way because this is the way you'll implement the product. You'll install and configure your server, create users and groups for it, and then ensure that they can access only the objects they are supposed to. I'll use this same logical approach in our discussions here.
You can think of your database system like a bank building. As the bank building is planned, the architects put security in the design. These designs have areas that the public will access, such as the parking lot and the lobby. Other areas are accessed by certain customers, but not others, such as the safe deposit box room. Still other areas are protected from all customers, such as the main vault. Bank employees go into the vault and add money from the customers, or take money out for them. I’ll use this analogy as we go along.
Some organizations actually have a written set of guidelines for security, called a “risk profile” or “risk assessment” for their computing assets. If your organization is bound by government or other regulations, this might be a requirement for you. In that case, you can map the elements I’m describing here into your overall plan. Even if you aren’t required to keep this kind of a document, it’s often a good idea.
Physical Security
Starting at the lowest level, physical security has to do with anything you can touch and feel. The buildings where your servers live, the locks, even the lighting matters.
Even if the designers of our bank building planned perfect security, it wouldn't be effective unless the builder actually implements the design. This is also true in the database.
If you’re using a Data Center — a building away from the main portion of your campus or something you rent from someone else, or even if you are using a “cloud” or distributed computing model, it’s important that you consider this level. After all, in those circumstances the physical elements are out of your control, but you are still responsible for this security. You should learn as much as you can about the safeguards in place for the physical elements of your security.
These elements include not just buildings and locks on the computer-rack cages, but other things you might not think about. What kind of security is there for the wiring between the systems — and even the wiring coming in and out of the building? In certain situations (such as the requirements for an ISO 270001-level system) you even need to think about the type of printers and who has access to them. It’s not just the physical portions of the system; it’s who has access to those physical elements.
Operating System Security
I'll explain these physical considerations further in another tutorial, but the basics are that you should have good physical access security policies and procedures.
The next level to consider is the operating system. Each generation of an operating system usually improves on the security of the previous one, but you need to understand what vulnerabilities it has. Every computer operating system is designed to let people access resources — your job is to ensure they can only access what they are allowed to.
If you are using a service provider that hosts your SQL Server instance, then it’s important to understand how they handle the operating system for you. If you are maintaining the operating system yourself, you need to know how its security is configured, you need to apply the latest service packs where appropriate, and only allow access to protocols and ports that are absolutely necessary. The key is to reduce the surface area that you expose to the outside world.
Platform Security
The next area of security for your database system is the platform - SQL Server. Just like the bank building, security begins with the design. When you begin to think about the database design, you should follow sound, basic principles. One of those is to think about security, and develop a plan for how you will implement it.
Just as in the operating system, the more recent versions of SQL Server are more secure than their predecessors. Service packs and hotfixes also have security implications, so after careful testing and reading up, you should apply those wherever you can.
With the version and patching complete, you should move on to hardening SQL Server using the Configuration Manager tool. While the mantra of SQL Server is “secure by default”, there are steps you can take to make it safer. Disable protocols that you will not use, start the services with low-privileged accounts (use only the Configuration Manager or Setup.exe to set the service accounts for SQL Server) and configure the firewall for SQL Server — all of these are the least you should do to secure the configuration of SQL Server.
Users and Groups — Principals
In our bank example, the users are account holders. Account holders in the bank are allowed different levels of access. People with business at the bank are allowed in the front door, and based on who they are, allowed further access into particular bank accounts.
That's similar to the accounts — or principals - in SQL Server. You want to allow all users with valid reason into the server, and then based on who they are, further along into various data elements. That is the cause of a lot of confusion around database accounts. When we talk about bank accounts, it's the same person at the front door of the lobby that walks through into the safe deposit box room. In SQL Server, however, there are two users involved — one that accesses SQL Server, and another that accesses one or more databases. There are two tables involved in this process. The first is in the master database, called sysxlogins. The rows in this table store the user names, and a unique number for each of them. The second table resides in each database, and it's called sysusers. It has a unique number that corresponds to the one in the master database. That's the cause of "orphaned" accounts when you backup a database on one server, and restore it on another. The sysxlogins table in the new server's master database no longer points to the user accounts in the database you restored.
You can create these accounts in SQL Server, which means that they don't have to exist in Windows. You can also "add" an account from Windows, either from a domain or a local Windows account, to the server. If you create the account in SQL Server, you control the password and other account information. In SQL Server 2000, you have to manually set the complexity of the password, how often it is changed and so forth. In SQL Server 2005 (running on Windows 2003 or higher), you can have those kinds of policies enforced by the operating system.
Whether you create the account in SQL Server or use Windows authentication, you still have to place the server user in a database account. You can also assign the user account to a group, which Microsoft calls a "role." There are two types of these, which I'll cover further in another tutorial. Roles allow you to group users together than perform a similar task.
User accounts are called "Principals." The reason they aren't just called "users" is that the accounts might represent a service or other object that needs to access data. In fact, some applications don't have individual user accounts in SQL Server. The application writes a table of its own to implement security, and accesses the database as a single account. SQL Server even has a special facility for this type of operation, called an application role, which essentially logs in and out for every call to the database. I’ve got more on this topic here and here.
Objects — Securables
At the bank, each object, such as an account or a particular check, has security. While an account holder might be allowed to look at one account, they may not have permission to look at another. In fact, an account holder might be able to view the amount in an account but not be able to withdraw money from it. For instance, a lender can view my balance or even transactions, but they are not able to do anything else in the account. My employer sends my paycheck to my account, but they can't take money from it or see my balance. My wife, however, can see the balance, add money to the account, or remove money from it.
The same holds true in the database. Each and every object (called a securable) has permissions. You have to grant permissions on each table, view and stored procedure in each database, to each principal that you want to have access.
There are two types of permissions, object and statement. To allow principals to access nouns (such as views, tables, or stored procedures), you grant object permissions. To allow a principal to work with a verb (such as the ability to create, alter or delete nouns), grant statement permissions. I'll explain these further in another tutorial.
It may seem that a lot is happening with SQL Server security, but if you keep the bank analogy in mind and take the process step by step, it's not difficult at all. In the security tutorials that follow, I'll show you how to work with each of these areas one at time. More information on this topic is here.
Another note here — the data itself can have security. Various forms of encryption are available, and I talk about those here.
Programming Security
With everything from the building to the networking, operating system, configuration, users and objects configured, the final layer of security is in the code you write. All the careful planning in the world won’t help if your code allows someone to impersonate a user, or compromise a password.
There are two broad areas to consider. The first is in the database or “server-side” code, such as Transact-SQL (T-SQL) statements, stored procedures, functions, or CLR code running in SQL Server. Important considerations here are to understand “chain of ownership” basics, keeping track of who has which permissions to run each statement on what object, not using impersonation without understanding what you’re allowing, not calling out to the operating system. There’s much more on this important topic here.
The second area is the application code that a user accesses. Don’t embed passwords in code, ever. I can’t tell you how many times I’ve looked at source code and found high-privileged user account information embedded in the code, in plain sight. More on this topic is here.