Contents xxv Enable Tracing for IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866 Using IIS Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867 Centralized Tracing for ASP.NET and IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . 867 Modify the XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873 Breakpoints: Extending IIS 7.0’s Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874 How Developers Extend Their Module to Support Failed Request Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874 Create and Compile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876 Add Managed Module to IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878 Enabling Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879 Reality: Inside What Tracing Can’t Do in IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . 881 Identifying That You Have a Memory Leak . . . . . . . . . . . . . . . . . . . . . . . . 882 Downloading Debug Diagnostics and Enable Leak Tracker . . . . . . . . . . . . . 883 Capturing Memory Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890 Chapter 18 Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 Migrating to IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 Migration Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 Upgrading Paths by OS Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893 Upgrade versus Clean Install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Upgrade Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Detect and Gather . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Image Copy and Unpacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Restore Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 After the Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Fitting and Finishing Work in IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Using Tracing to Isolate Your Server Features . . . . . . . . . . . . . . . . . . . . . 897 Static HTML Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899 Classic ASP Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900 ISAPI-based Extension Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . 902 ASP.NET Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903 Centralizing Your Log File to Reduce Clutter . . . . . . . . . . . . . . . . . . . . 905 Getting a Backup of Your Confi guration . . . . . . . . . . . . . . . . . . . . . . . . 906 The Developer’s Call to Arms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906 Downloading the Native C\C++ Starter Kit . . . . . . . . . . . . . . . . . . . . 907 Downloading the Managed Code Starter Kit . . . . . . . . . . . . . . . . . . . . 907 xxvi Contents Building IIS Manager Extensions for Your Modules . . . . . . . . . . . . . . . . 907 Adding Tracing to Your Modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909 Chapter 19 Introduction to SQL Server Security . . . . . . . . . . . . . . . . . . . . . 911 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Multifaceted SQL Server Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Security: Why Worry About It? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 The Principle of Least Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913 Installing SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913 Features off by Default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916 Services off by Default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917 Microsoft’s Baseline Security Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920 Building Security into Your Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922 Managed Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926 Chapter 20 Surface Area Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930 SQL Server Surface Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930 What Is Surface Area? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930 The Surface Area Confi guration Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931 The Surface Area Confi guration Tool GUI . . . . . . . . . . . . . . . . . . . . . . 931 The Surface Area Confi guration for Services and Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935 Database Engine Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938 Database Engine Remote Connections . . . . . . . . . . . . . . . . . . . . . . . 938 Analysis Services Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938 Analysis Services Remote Connections . . . . . . . . . . . . . . . . . . . . . . 938 Reporting Services Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938 SQL Server Agent Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 Full-Text Search Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 Notifi cation Services Instance Services . . . . . . . . . . . . . . . . . . . . . . . 939 Integration Services Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 SQL Server Browser Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 The Surface Area Confi guration for Features . . . . . . . . . . . . . . . . . . . . . 940 Surface Area Confi guration—Features . . . . . . . . . . . . . . . . . . . . . . . 941 The Surface Area Confi guration Tool Command Line Utility . . . . . . 942 Contents xxvii Practical Applications for the Surface Area Confi guration Tool . . . . . . . . 944 Scenario 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945 Scenario 2: Auditing an Existing Installation . . . . . . . . . . . . . . . . . . . 946 Scenario 3: Fixing an Issue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949 Chapter 21 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952 Using Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952 Role Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953 User-Defi ned Standard Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953 User-Defi ned Application Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954 Predefi ned Database Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954 Fixed Server Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957 Administering Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958 Situational Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966 Chapter 22 Authentication and Granular Access . . . . . . . . . . . . . . . . . . . . 967 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968 Understanding the SQL Server Authentication Modes . . . . . . . . . . . . . . . . . . . 968 Changing the Authentication Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970 Finding the Authentication Mode by Using xp_loginconfi g . . . . . . . . . . . . 971 Finding the Authentication Mode in the Registry . . . . . . . . . . . . . . . . . . . 971 Endpoint Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972 Endpoint Authentication Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 HTTP Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 Basic Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 Digest Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975 NTLM Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975 Kerberos Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976 Integrated Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976 TCP Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 Negotiate Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978 Certifi cate Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978 Dedicated Administrator Connection . . . . . . . . . . . . . . . . . . . . . . . . . . 979 xxviii Contents Confi guring Kerberos Support for Your SQL Server . . . . . . . . . . . . . . . . . . . . 980 Basic Concepts of Kerberos Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 SQL Server Service Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 SQL Server TCP Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982 The SETSPN.EXE Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983 Confi guring Kerberos for an HTTP Endpoint . . . . . . . . . . . . . . . . . 984 Confi guring Kerberos for a TCP Endpoint . . . . . . . . . . . . . . . . . . . . 984 Extra Steps with Clustered Instances of SQL Server . . . . . . . . . . . . . . 985 Auditing Authentication Attempts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985 Understanding Granular Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986 Principals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987 Securables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988 CONTROL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 ALTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 ALTER ANY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990 TAKE OWNERSHIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990 IMPERSONATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990 CREATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990 VIEW DEFINITION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990 BACKUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 RESTORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 Managing Granular Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 Understanding Implied Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992 Assigning Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 Chapter 23 Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 Understanding Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 The Schema as a Container. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 Schemas in Previous SQL Server Versions . . . . . . . . . . . . . . . . . . . . . . . . 1002 Problems That Arise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 What about Your Security Perimeters? . . . . . . . . . . . . . . . . . . . . . . 1005 Schemas in SQL Server 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 Built-in Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 Changes Due to the User-Schema Separation . . . . . . . . . . . . . . . . . . . . . . . . 1008 New Flexibility with Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008 Contents xxix Using Default Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008 Changes to the Functionality of Familiar Concepts . . . . . . . . . . . . . . . . . 1009 Ownership Chaining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009 Checking Permissions in an Ownership Chain . . . . . . . . . . . . . . . . . . 1009 Ownership Chains Gain Complexity in SQL Server 2005 . . . . . . . . . . 1011 Upgrading Existing Servers to SQL Server 2005 . . . . . . . . . . . . . . . . . . . 1011 Designing Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012 Designing the Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012 Designing Schemas for Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013 Considering Security throughout the System Development Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013 Are You Rewriting Your SDLC Due to This New SQL Server Release Then? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013 Managing Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014 Viewing Schema Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1016 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016 Creating a Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1020 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024 Moving Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1025 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027 Dropping Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1028 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029 Changing Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1030 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030 Setting Permissions on Schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1032 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034 Setting the Default Schema for a User . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034 Using SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . 1035 Using T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036 Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036 Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038 . . . . . . . . . . . . . . . . . 894 Detect and Gather . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Image Copy and Unpacking . . . . . . . . . . . . . . Authentication and Granular Access . . . . . . . . . . . . . . . . . . . . 967 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968 Understanding. Kerberos Support for Your SQL Server . . . . . . . . . . . . . . . . . . . . 980 Basic Concepts of Kerberos Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 SQL Server Service Account