11
votes

Numéro de port de SQL Server

Je me demande quels ports sont utilisés par le moteur de base de données SQL Server? J'ai besoin de ce numéro de port pour écrire des scripts de configuration pour accorder un accès à un port spécifique de la machine installé avec SQL Server pour la rendre en sécurité. Une question connexe consiste à savoir si le moteur de base de données SQL Server utilisera un numéro de port statique pour servir toutes les demandes du client ou utiliser un port pour chaque demande?

BTW: mon arrière-plan est SQL Server 2008 Enterprise.

Merci d'avance, George


0 commentaires

5 Réponses :


4
votes

1433 est ce que SQL Server utilise par défaut. Il a depuis au moins SQL Server 6.0.

Généralement, pour des raisons de sécurité, vous ne voulez pas l'ouvrir jusqu'au monde. Les gens devraient accéder à votre dB seul via une application / service Web. Les connexions directes SQL Server sur les tubes sont respectueuses des périls de sécurité.

Toutes les sessions utilisera ce port (A Port 80 pour un site Web), mais vous pouvez le modifier, à l'aide de l'outil de configuration SQL Server, décrit ici .


8 commentaires

Merci, 1. Vous voulez dire que toutes les sessions utiliseront le port 1433 uniquement pour traiter toutes les opérations sur SQL Server? 2. Si la configuration SQL Server est différente, c'est-à-dire à l'aide d'un autre port, où voir le changement?


Merci, alors ouvrez ce port devrait être suffisant pour les applications ADO.NET pour accéder à un moteur de base de données SQL Server 2008, toutes les instances utilisent le même port?


@George: Oui. Mais assurez-vous que vous ne l'ouvrez pas à l'extranet!


Toutes les instances sur le même serveur utiliseront le même port?


@George: Oui, oui la volonté. Les connexions TOUJOURS appuyez sur le port SQL Server. Encore une fois, tout comme le port 80 pour Apache ou IIS.


Désolé Eric, peut-être que je ne me suis pas fait comprendre. Instances Je veux dire une autre instance nommée pour le même serveur SQL, ne signifie pas différentes sessions au même moteur de base de données d'instance SQL Server. Donc, dans mon contexte d'instance, tous utiliseront le même numéro de port, c'est-à-dire 1433 par défaut? Ma confusion est de la réponse ci-dessous de Chris, semble-t-elle différentes instances utilisera un numéro de port différent?


@George: Ouais. Mon port dynamique SQL 2008 est défini sur 1660. Aller à Démarrer -> Microsoft SQL Server -> Outils de configuration -> Configuration Manager, puis accédez à Protocoles pour , double-cliquez sur TCP / IP et allez à la L'onglet Adresse IP pour obtenir la réponse définitive.


Merci Eric, je suis confus sur le concept de port dynamique. Cela signifie-t-il que l'instance utilisera toujours la valeur du numéro de port attribué par le port dynamique? Ou l'instance choisira un numéro de port disponible de manière dynamique?



1
votes

: 1433 est le défaut . Cependant, il est possible de changer ce port et si vous avez affaire à plusieurs instances, chacun aura un port différent.

Une recherche rapide Google présente le lien suivant:

http://decipherinfosys.wordpress.com/2008/01/02/finding-the-port-number-for-a-particulaire-sql-server-instance/

... et je suis sûr que TechNet aura plus d'informations.


1 commentaires

Je n'ai pas de problème à y accéder, en cliquant ou en copiant-coller; Quelle erreur voyez-vous?



10
votes

L'instance par défaut sera, par défaut, écoutez sur TCP / 1433. Cela pourrait éventuellement écouter sur un tuyau nommé (TCP / 445) - mais je pense que cela doit être explicitement activé ces jours-ci.

Les instances nommées, comme SqlexPress, écoutez un port dynamique. Le port dynamique est résolu par le client via le protocole de résolution SQL Server (navigateur AKA SQL) - qui écoute sur UDP / 1434 1 . Ce port dynamique est choisi au premier démarrage et restera généralement la même chose via les redémarrages futurs (stockés dans le registre) - mais s'il y a une affirmation, SQL choisira un nouveau port.

Vous pouvez, et devrait généralement, configurer toutes les instances d'un serveur SQL de production pour utiliser un port statique. Cela rend le pare-feu beaucoup plus facile.

1 La seule raison pour laquelle vous devez mettre l'instance nommée, disons, une chaîne de connexion est de sorte que le client sait demander à SSRP pour le port dynamique. Si c'est un port statique ou autre que connu, vous pouvez simplement pointer le client sur serveur = serveur.com: port , laissant le nom de l'instance.


5 commentaires

Merci Marc, je suis confus sur ce que tu veux dire - "Mais s'il y a une affirmation, SQL choisira un nouveau port."? Surtout ce qui signifie qu'il y a une affirmation. Voulez-vous dire si le port dynamique est occupé par un autre processus autre que SQL Server, un nouveau port sera choisi?


Je souhaite confirmer avec vous que si nous utilisons un numéro de port sans par défaut, et dans la chaîne de connexion, nous ne spécifions pas explicitement que le numéro de port, SQL Server et Client pourront toujours utiliser SSRP pour résoudre pour rechercher le numéro de port à utiliser?


Oui - Si le port "préféré" (choisi sur la première exécution) est utilisé, SQL choisira un nouveau sur le démarrage. Et oui, tant que vous autorisez UDP / 1434 et le service de navigateur SQL Server est en cours d'exécution. msdn.microsoft.com/en-us/library/ms181087.aspx


Merci Mark, 1. Ma confusion est que le mot dynamique me fait penser que chaque fois qu'un client se connecte à SQL Server, SQL Server servira le client à l'aide d'un nouveau port (dynamique), de sorte que la valeur du numéro de port est donc difficile à déterminer. Dans votre réponse, le port dynamique est en réalité une valeur fixe (choisissez une valeur inutilisée), corriger? 2. Lorsque nous configurons le port dynamique dans SQL Server Configuration Manager, nous devons spécifier la valeur 0, cela signifie-t-il qu'il est toujours impossible pour nous de connaître la valeur "fixe" du port dynamique?


Correct - c'est dynamique en ce sens qu'elle est choisi au démarrage - chaque client se connecte au même port. Je pense que vous pouvez vérifier la configuration MGR pour voir quelle est la valeur actuelle lorsque le serveur est en cours d'exécution. Sinon, il est stocké dans le registre et aussi écrit aux journaux SQL que je pense.



1
votes

Parfois, le port n'est pas 1433

de http://www.php.net/ Manuel / fr / Function.msql-Connect.php # 76256 Registre dans le registre à l'aide de Regedit.exe à hkey_local_machine \ logiciel \ Microsoft \ Microsoft SQL Server \ sqlexpress \ mssqlserver \ supersocketnetlib \ tcp.

L'une des paires de noms NameValue a le nom TCPPort et une valeur, qui est le port que le serveur SQL écoute.


0 commentaires

5
votes

Un moyen très facile et programmatique est de simplement interroger la colonne local_tcp_port dans sys.dm_exec_connections: xxx pré>

si cela ne renvoie aucun résultat, c'est probablement parce que le serveur est sur cette machine et Il n'y a pas de connexions d'autres machines. Il n'y a donc pas de connexions TCP. p>

Dans ce cas, si vous interrogez avec SQLCMD, il suffit de mettre "TCP:" devant le nom du serveur, par exemple p> xxx pré>

ou si vous Connectez-vous avec SQLCLIENT, vous pouvez alors ajouter «Bibliothèque de réseau = DBMSSOCN» pour forcer TCP, par exemple P>

string connStr = "Server=(local); Integrated Security=true; Network Library=dbmssocn";


1 commentaires

Grande solution - merci.