2009-08-15 14 views
10

¿Me pregunto qué puertos usa el motor de la base de datos de SQL Server? Necesito ese número de puerto para escribir scripts de configuración para otorgar acceso a un puerto específico de la máquina instalada con SQL Server para que sea seguro. Una pregunta relacionada es si el motor de la base de datos de SQL Server usará un número de puerto estático para atender todas las solicitudes de los clientes, o usar un puerto para cada solicitud.número de puerto de SQL Server

BTW: mi experiencia es en la empresa SQL Server 2008.

gracias de antemano, George

Respuesta

4

1433 es lo que SQL Server utiliza por defecto. Tiene desde al menos SQL Server 6.0.

Generalmente, por razones de seguridad, no desea abrir esto al mundo. La gente debería acceder a su DB solo a través de una aplicación/servicio web. Las conexiones directas de SQL Server a través de los tubos están plagadas de peligros de seguridad.

Todas las sesiones usarán este puerto (a la puerta 80 para un sitio web), pero puede cambiarlo, utilizando la Herramienta de configuración de SQL Server, que se describe en here.

+0

Gracias, 1. ¿quiere decir que todas las sesiones utilizarán el puerto 1433 solo para tratar todas las operaciones en SQL Server? 2. Si la configuración de SQL Server es diferente, es decir, usando algún otro puerto, ¿dónde ver el cambio? – George2

+0

Gracias, entonces, ¿este puerto abierto debería ser suficiente para que las aplicaciones ADO.Net tengan acceso al motor de base de datos de SQL Server 2008, todas las instancias usan el mismo puerto? – George2

+1

@George: Sí. ¡Pero asegúrate de no abrirlo en la extranet! – Eric

1

: 1433 es el predeterminado. Sin embargo, es posible cambiar este puerto, y si se trata de varias instancias, cada una tendrá un puerto diferente.

Una rápida búsqueda en Google sube el siguiente enlace:

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

... y estoy seguro de Technet tendrá más información.

+1

... y lo que Eric dijo, también. –

+0

¿No se puede abrir la url? – George2

+0

No tengo problemas para acceder a él, ya sea haciendo clic o copiando y pegando; ¿Qué error ves? –

9

La instancia predeterminada, de forma predeterminada, escuchará en tcp/1433. Posiblemente también podría escuchar en un tubo con nombre (tcp/445), pero creo que debe estar explícitamente habilitado en estos días.

Instancias con nombre, como SQLEXPRESS, escuchan en un puerto dinámico. El cliente resuelve el puerto dinámico mediante el protocolo de resolución de SQL Server (también conocido como SQL Browser), que escucha en udp/1434 . Este puerto dinámico se elige en el primer arranque, y generalmente permanecerá igual a través de reinicios futuros (almacenados en el Registro), pero si hay una disputa, SQL elegirá un nuevo puerto.

Puede, y generalmente debe, configurar todas las instancias de un servidor SQL de producción para usar un puerto estático. Esto hace que el cortafuegos sea mucho más fácil.

La única razón por la que debe colocar la instancia con nombre en, por ejemplo, una cadena de conexión es para que el cliente sepa que debe solicitar SSRP para el puerto dinámico. Si se trata de un puerto estático o conocido, simplemente puede apuntar al cliente al Server=server.com:port, dejando fuera el nombre de la instancia.

+0

Gracias Marc, estoy confundido acerca de a qué se refiere, "pero si hay una disputa, SQL elegirá un nuevo puerto". Especialmente lo que significa que hay una disputa. ¿Quiere decir que si el puerto dinámico está ocupado por otro proceso que no sea SQL Server, se elegirá un nuevo puerto? – George2

+0

Quiero confirmar con usted que si usamos un número de puerto no predeterminado, y en la cadena de conexión no especificamos explícitamente el número de puerto, SQL Server y el cliente siempre podrán usar SSRP para resolver la búsqueda del número de puerto a usar ? – George2

+1

Sí: si el puerto "preferido" (elegido en la primera ejecución) está en uso, SQL seleccionará uno nuevo al inicio. Y sí, siempre que permita udp/1434 y se esté ejecutando el servicio del navegador del servidor Sql. http://msdn.microsoft.com/en-us/library/ms181087.aspx –

1

A veces, el puerto no 1433

es de http://www.php.net/manual/en/function.mssql-connect.php#76256 Buscar en el registro mediante regedit.exe en HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SQLEXPRESS \ MSSQLServer \ SuperSocketNetLib \ Tcp.

Uno de los pares nameValue tiene el nombre TcpPort y un valor, que es el puerto que está escuchando el SQL Server.

4

Una forma muy fácil y programática es sólo para consultar la columna de la local_tcp_port en sys.dm_exec_connections:

select local_tcp_port from sys.dm_exec_connections where local_tcp_port is not null 

Si eso no devolvió resultados, entonces es probablemente porque el servidor está en esta máquina y no hay conexiones de otras máquinas, por lo que no hay conexiones tcp.

En ese caso, si está consultando con sqlcmd, simplemente coloque "tcp:" delante del nombre del servidor, p.

sqlcmd -E -S tcp:(local) 

O si se está conectando con SqlClient, a continuación, puede añadir "Red de Bibliotecas = dbmssocn" para forzar TCP, por ejemplo,

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

Gran solución, gracias. – JohnLBevan

Cuestiones relacionadas