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 is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.

Tip

What's New in SQL Server 2022 - Episodes

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-2024 All rights reserved

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