Chapter 01 · SQL Server Platform Foundations, Editions, Licensing Awareness, and Lab Setup

Install SQL Server and SSMS/Client Tools, Configure an Instance, and Verify Connectivity

Install or select a SQL Server 2025 lab instance and prove its build, edition, database state, transport, authentication, encryption, endpoint, and client connectivity with reproducible evidence.

Intermediate90–120 minutesInstall verification + connectivity labSQL Server 2025 (17.x)Developer/Express; local single instanceLast reviewed: August 2026

Learning outcomes

An installer reporting “success” proves only that setup reached a completion state. ServiceHub needs a usable and diagnosable instance: the expected build/edition is running, clients reach the intended endpoint, authentication behaves as designed, encryption is understood, and the operator can explain which evidence is instance-side versus client-side.

01

Install or select a supported SQL Server 2025 non-production instance and verify its exact build/edition.

02

Validate service/endpoint/connectivity state instead of treating setup completion as proof of readiness.

03

Inspect the current connection transport, authentication scheme, encryption status, client program, and server TCP endpoint.

04

Explain why TrustServerCertificate is a troubleshooting shortcut rather than a production certificate-validation design.

05

Create a repeatable post-install evidence checklist that works for Windows, Linux, and container labs.

Scope

This lesson uses a single local Developer/Express instance. It does not open a database port to the public internet, configure a production firewall, or create a production certificate authority. Network/security changes must remain on disposable or explicitly authorized lab systems.

1. Install using the platform’s supported path

On Windows, use current SQL Server 2025 Setup media and select a free Developer edition or Express for the course. Install the Database Engine; add other features only when a later lesson requires them. Install current SSMS separately for administration. On Linux, use Microsoft’s repository/package instructions for your supported distribution and configure the instance with the documented mssql-conf flow. In containers, use the official 2025 image and persistent storage strategy from Lesson 3.

Do not copy an unattended production setup command from a blog into a new environment. Service accounts, directories, collation, authentication, endpoints, certificates, and feature selection are architecture decisions. Start with a minimal learning instance, then verify the effective state.

2. Verify the process you actually reached

sql · post-install identity check
SELECT    @@VERSION AS version_string,    SERVERPROPERTY('MachineName') AS machine_name,    SERVERPROPERTY('ServerName') AS server_name,    SERVERPROPERTY('InstanceName') AS instance_name,    SERVERPROPERTY('Edition') AS edition,    SERVERPROPERTY('ProductVersion') AS product_version,    SERVERPROPERTY('ProductLevel') AS product_level,    SERVERPROPERTY('ProductUpdateLevel') AS product_update_level,    SERVERPROPERTY('IsIntegratedSecurityOnly') AS windows_auth_only;SELECT    name,    state_desc,    user_access_desc,    recovery_model_desc,    compatibility_levelFROM sys.databasesORDER BY database_id;

ProductUpdateLevel can report a CU label when that metadata is available. Record the numeric ProductVersion as the primary build evidence. The latest CU today is not a permanent course constant; future chapter work must re-check Microsoft’s servicing pages and known issues before upgrades.

3. Verify the connection path, not just query success

sql · connection evidence for the current session
SELECT    c.session_id,    c.net_transport,    c.protocol_type,    c.encrypt_option,    c.auth_scheme,    c.local_net_address,    c.local_tcp_port,    c.client_net_address,    s.host_name,    s.program_name,    s.client_interface_name,    s.login_name,    s.original_login_nameFROM sys.dm_exec_connections AS cJOIN sys.dm_exec_sessions AS s  ON s.session_id = c.session_idWHERE c.session_id = @@SPID;

If a local SSMS connection uses Shared Memory, a TCP port is not involved. To test TCP deliberately, connect using a TCP server specification such as tcp:localhost,14333 for the container mapping used in Lesson 3 or the configured local TCP port. A successful Shared Memory query does not prove that a remote TCP client can pass the firewall and reach the listener.

The default SQL Server TCP port is commonly 1433 for a default instance, but named instances and hardened deployments can use other ports. Never make firewall rules from memory; inspect the effective endpoint and connect to the explicit test target.

4. Authentication mode and authorization are different

Windows authentication delegates identity to Windows/Active Directory mechanisms where supported. SQL authentication uses SQL Server logins with password policy options. Mixed mode allows both. SERVERPROPERTY('IsIntegratedSecurityOnly') helps identify a Windows instance configured for Windows-only authentication, but a successful login still says nothing about whether the principal has appropriate permissions inside every database.

Authentication answers “who are you?” Authorization answers “what may this principal do?” Lesson 5 creates a deliberately narrow application login/user. Avoid using sa or a sysadmin identity for application traffic; an administrative login is only a bootstrap mechanism in a disposable lab.

5. Encryption: encrypted is not the same as authenticated peer identity

SQL Server 2025 expands TDS 8.0 support and strict connection encryption. sys.dm_exec_connections.encrypt_option tells you whether the current connection is encrypted, but it does not tell you that the client validated the certificate chain and hostname exactly as your production policy requires.

Modern Microsoft drivers support encryption settings such as mandatory and strict. Strict encryption uses TDS 8.0 and requires certificate validation; TrustServerCertificate=true bypasses normal certificate trust validation in non-strict modes and should not become the default “fix” for certificate errors.

Evidence boundary

An encrypted channel protects traffic confidentiality. A validated certificate also helps the client authenticate the server endpoint. A self-signed certificate accepted with TrustServerCertificate can encrypt traffic while still bypassing normal peer-identity validation.

6. Deliberately wrong repair: TrustServerCertificate=true everywhere

A developer upgrades a driver and receives a certificate validation error. They add TrustServerCertificate=true to every environment and declare TLS fixed. The symptom disappears because validation was bypassed, not because the certificate became correct.

A production repair starts by identifying the server DNS name, certificate subject/subject-alternative names, issuing certificate authority, expiration, private-key permissions, and driver encryption mode. Configure a certificate that clients trust and connect using a name the certificate validates. Use a temporary trust bypass only in a controlled local lab when you explicitly understand the loss of peer verification.

7. Hands-on post-install verification

Run the following as an administrative lab identity. It changes no server configuration; it creates one disposable database to prove basic DDL and write/read behavior.

sql · create a connectivity probe database
IF DB_ID(N'ServiceHubConnectivityProbe') IS NULL    CREATE DATABASE ServiceHubConnectivityProbe;GOUSE ServiceHubConnectivityProbe;GOCREATE TABLE dbo.ConnectionProbe(    probe_id       int IDENTITY(1,1) PRIMARY KEY,    observed_at    datetime2(0) NOT NULL DEFAULT SYSUTCDATETIME(),    login_name     sysname NOT NULL DEFAULT ORIGINAL_LOGIN(),    host_name      nvarchar(128) NULL DEFAULT HOST_NAME(),    app_name       nvarchar(128) NULL DEFAULT APP_NAME());GOINSERT dbo.ConnectionProbe DEFAULT VALUES;SELECT * FROM dbo.ConnectionProbe;GO

Then collect connection evidence with the DMV query above and save it alongside the engine build. If you need to test TCP, reconnect explicitly over TCP and confirm net_transport, local_tcp_port, and the client address.

sql · cleanup
USE master;GOALTER DATABASE ServiceHubConnectivityProbe SET SINGLE_USER WITH ROLLBACK IMMEDIATE;DROP DATABASE ServiceHubConnectivityProbe;GO

Verification checklist:

  • Engine build and edition match the intended lab baseline.
  • System databases are online; the probe database can be created/read/dropped.
  • The intended client tool reaches the intended instance.
  • If TCP is required, a TCP connection—not Shared Memory—has been tested.
  • Authentication mode is understood and the application will not use sysadmin.
  • Connection encryption is observed; certificate validation assumptions are documented separately.
  • Firewall exposure is limited to the authorized lab boundary.

8. Production judgment

“Server is up” should become a layered health statement: process/service is running, endpoint is listening, network path is reachable, TLS negotiation and certificate validation satisfy policy, authentication succeeds, authorization is least-privilege, database state is online, and a representative query works. Monitoring should check the layer it claims to monitor. A TCP socket probe is not a transaction probe; a successful SELECT 1 is not proof that backups or Agent jobs work.

Any change to Force Encryption/Force Strict Encryption, network protocols, ports, certificates, or authentication mode can affect clients and may require service restart/maintenance. Verify current Microsoft documentation and driver support before enforcing new settings.

9. Summary and next step

A completed installer is only the first checkpoint. You now know how to prove the exact SQL Server instance/build, inspect databases, trace the current connection transport, distinguish authentication from authorization, and treat TLS encryption separately from certificate identity validation. Lesson 5 turns this verified instance into a reusable course lab with deterministic data, least-privilege application access, backup conventions, and reset/cleanup rules.

Check your understanding

  1. Why can a successful local SSMS query fail to prove that remote TCP connectivity works?
  2. What is the practical difference between encrypt_option = TRUE and strict certificate validation?
  3. Why is TrustServerCertificate=true a risky universal fix?
  4. Which SERVERPROPERTY value should be recorded to identify the exact Database Engine build?
  5. Why should applications avoid using a sysadmin login even in a production environment where it “works”?
Review the answers

Local SSMS can use Shared Memory. Remote clients need a TCP endpoint, network route, firewall allowance, and compatible TLS/authentication.

encrypt_option reports channel encryption; strict connection mode includes enforced certificate validation/hostname requirements through a TDS 8.0-capable client.

It bypasses normal certificate validation, so the client may encrypt to a server whose identity it has not validated according to policy.

ProductVersion gives the numeric engine build; record Edition and update metadata as complementary context.

Sysadmin bypasses normal permission boundaries. Compromise or application bugs then become server-wide incidents; least privilege constrains blast radius.

Authoritative references

Keep knowledge open

Help the academy stay free and grow.

If these tutorials save you time, a small donation supports new lessons, technical review, diagrams, examples, and long-term maintenance.

ETHEthereum / ERC-20 only
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0

Send only Ethereum or ERC-20 compatible assets to this address.