sqlschool.gr logo

articles

Articles of SQLschool.gr Team

How to configure a SQL Server instance to listen on multiple TCP Ports

Antonios Chatzipavlis
Wednesday 29 April 2020

Overview

Σαν γενικότερη αρχή έχουμε το να μην βγάζουμε ένα SQL Server instance στο internet. Αυτό όμως μπορεί να πρέπει να γίνει ιδιαίτερα σε καταστάσεις όπως αυτές που ζούμε σήμερα με την πανδημία. Αν θα πρέπει να προχωρήσουμε σε κάτι τέτοιο τουλάχιστον ας το κάνουμε σωστά.

Αρκετές είναι οι περιπτώσεις που θέλουμε να δώσουμε πρόσβαση σε κάποιο SQL Server instance μέσω internet για συγκεκριμένους χρήστες που κυρίως είναι αυτοί που είναι επιφορτισμένοι με την υποστήριξη του, και αυτό θέλουμε να γίνει με το μέγιστο βαθμό ασφάλειας.

Εκτός όμως από αυτό μπορεί να θέλουμε να κάνουμε mapping τα connections σε συγκεκριμένο NUMA όπως έχω γράψει σε παλαιότερο άρθρο μου. Configuring and Mapping Connections to specific ports and processors to NUMA nodes

Note

Φυσικά από μόνο του αυτό δεν φτάνει καθώς θα πρέπει να συνδυαστεί με τα αυστηρά firewall rules που θα πρέπει να δημιουργηθούν και που όλοι εμπιστευόμαστε.

Create New Endpoint

Για να γίνει κάτι τέτοιο θα πρέπει να δημιουργήσουμε ένα νέο endpoint του οποίου φυσικά την port θα ορίσουμε στα firewall rules. Όπως στο παρακάτω παράδειγμα όπου φτιάχνω ένα νέο endpoint το οποίο ονομάζω SupportConnetion και στο οποίο ορίζω σαν port την 1500 (μπορείτε να βάλετε όποια θέλετε αρκεί να μην χρησιμοποιείται από αλλού)

Create Endpoint

USE master;  
GO  
CREATE ENDPOINT [SupportConnection]  
STATE = STARTED  
AS TCP  
   (LISTENER_PORT = 1500, LISTENER_IP = ALL)  
FOR TSQL() ;  
GO 

Εάν δούμε ποια είναι διαθέσιμα endpoints θα δούμε και αυτό που δημιουργήσαμε αλλά και το default TCP endpoint.

Check available Endpoints

SELECT * FROM sys.endpoints;
GO
Available Endpoints
name endpoint_id principal_id protocol protocol_desc type type_desc state state_desc is_admin_endpoint
Dedicated Admin Connection 1 1 2 TCP 2 TSQL 0 STARTED 1
TSQL Local Machine 2 1 4 SHARED_MEMORY 2 TSQL 0 STARTED 0
TSQL Named Pipes 3 1 3 NAMED_PIPES 2 TSQL 0 STARTED 0
TSQL Default TCP 4 1 2 TCP 2 TSQL 0 STARTED 0
TSQL Default VIA 5 1 5 VIA 2 TSQL 0 STARTED 0
SupportConnection 65536 259 2 TCP 2 TSQL 0 STARTED 0

Restore access on default TCP endpoint to public

Στο σημείο αυτό θα πρέπει να επισημανθεί ότι κάθε φορά που φτιάχνουμε ένα νέο endpoint "φεύγει" από το default TCP endpoint το CONNECT permission από το Public Role. Αυτό δεν θέλουμε να το χάσουμε καθώς θέλουμε όλοι τα εσωτερικά connections να δουλεύουν και για αυτό θα πρέπει να το επαναφέρουμε χρησιμοποιώντας το παρακάτω Grant statement.

Restore access on default TCP endpoint to public

GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] to [public];

Set access on endpoint to appropriate group or logins

Επόμενο βήμα είναι να δώσουμε access στα Logins που θέλουμε να χρησιμοποιούν αυτό το endpoint.

Set access on SupportConnection endpoint to appropriate group or login

GRANT CONNECT ON ENDPOINT::[SupportConnection] to [ADVENTUREWORKS\SQLSupport];

Set New Endpoint Port to TCP connections

Το τελευταίο βήμα είναι να ορίσουμε στην νέα endpoint port στα TCP Ports μέσα από το SQL Server Configuration Manager όπως δείχνω στο παρακάτω image.

Note

Απαιτείται restart του SQL Server service


Use SQL Server Configuration Manager to set new port
image

Test your solution

Μπορούμε να δοκιμάσουμε αν αυτό που έχουμε φτιάξει δουλεύει με την απλή χρήση ενός sqlcmd στο οποίο φυσικά θα χρησιμοποιήσουμε την νέα port αλλά θα πρέπει να έχουμε μπει και ένα από τα logins που επιτρέπετε να την χρησιμοποιήσουν.


Test new port connectivity
image


//Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

Get Certified: Become a Fabric Data Engineer

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn

sqlschool.gr © 2010-2025 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.