Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un Microsoft. Data.SqlClient cadena de conexión es una lista de keyword=value pares separados por puntos y coma. Pásalo a SqlConnection o SqlConnectionStringBuilder:
Server=tcp:sql.example.com,1433;Database=Orders;Integrated Security=true;Encrypt=Strict
Una cadena de conexión responde a cuatro preguntas:
- ¿Qué servidor y base de datos utiliza la aplicación?
- ¿Con qué identidad se ejecuta la aplicación?
- ¿Cómo valida el cliente el certificado del servidor?
- ¿Qué comportamiento de conexión necesita la carga de trabajo?
Este artículo trata esas opciones y las reglas que utiliza el controlador para leer el texto. Para cada palabra clave, sus sinónimos y su valor predeterminado, véase Opciones de conexión. Para crear y cambiar cadenas de conexión en el código, véase Constructores de cadenas de conexión.
Elige un patrón de autenticación
Utiliza el patrón que se ajuste al despliegue. Sustituye cada marcador de posición, como <server>, por tu valor.
| Medio ambiente | Pattern | Cadena de conexión |
|---|---|---|
| SQL Server en Windows con una identidad de Windows de dominio o local | Autenticación integrada de Windows | Server=<server>;Database=<database>;Integrated Security=true;Encrypt=true |
| Aplicación alojada en Azure y conectada a Azure SQL | Identidad administrada de Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Managed Identity;Encrypt=Strict |
| Estación de trabajo del desarrollador conectada a Azure SQL | Cadena de credenciales por defecto de Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict |
| Estación de trabajo de desarrollador conectándose a base de datos SQL en Microsoft Fabric | Cadena de credenciales por defecto de Microsoft Entra ID | Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict |
| Herramienta interactiva de escritorio que se conecta a Azure SQL | Autenticación interactiva de Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Interactive;Encrypt=Strict |
| Entorno que requiere autenticación SQL | Nombre de usuario y contraseña de una tienda secreta | Server=<server>;Database=<database>;User ID=<user>;Password=<password>;Encrypt=true |
La autenticación integrada de Windows se autentica con la identidad del proceso. Para una aplicación de escritorio o consola, normalmente es el usuario que ha iniciado sesión. Para una aplicación web o un servicio de Windows, es el pool de aplicaciones o la cuenta de servicio. La suplantación puede cambiar la identidad. Concede permisos de inicio de sesión y de base de datos a la identidad que realmente utiliza tu aplicación.
Estas tres formas de autenticación integrada de Windows son equivalentes:
Server=sql.example.com;Database=Orders;Integrated Security=true;Encrypt=true
Server=sql.example.com;Database=Orders;Integrated Security=SSPI;Encrypt=true
Server=sql.example.com;Database=Orders;Trusted_Connection=yes;Encrypt=true
Si una cadena establece Integrated Security=true y también establece User ID y Password, el controlador utiliza autenticación de Windows e ignora el nombre de usuario y la contraseña.
Microsoft. Data.SqlClient 7.0 y versiones posteriores necesitan el paquete de Microsoft.Data.SqlClient.Extensions.Azure versión compatible para los métodos de autenticación Microsoft Entra ID proporcionados por el controlador. No necesitas ese paquete cuando el código de la aplicación suministra un token de acceso o un callback de token de acceso.
Para los valores aceptados Authentication , consulte Opciones de autenticación. La autenticación también requiere usuarios de bases de datos, permisos y configuración de identidad en el servidor. Para los pasos de configuración, véase la autenticación de Microsoft Entra ID y la autenticación de SQL Server.
Especificar el servidor y la base de datos
Server y Database son los nombres de palabras clave más legibles. El constructor los escribe como sus equivalentes canónicos, Data Source y Initial Catalog. Los cuatro nombres funcionan en una cadena de conexión.
Configure Server en una de estas formas:
| Form | Example | Uso |
|---|---|---|
| Nombre del anfitrión | Server=sql.example.com |
La instancia predeterminada en el puerto 1433. |
| Nombre de host y puerto | Server=tcp:sql.example.com,1433 |
Un puerto TCP específico. Separa el puerto con una coma, no con dos puntos. |
| Instancia con nombre | Server=sql.example.com\SALES |
Una instancia nombrada. El controlador solicita el puerto al servicio SQL Server Browser a través del puerto UDP 1434. |
| Servidor local |
Server=(local) o Server=. |
La instancia predeterminada en el ordenador local. |
| LocalDB | Server=(localdb)\MSSQLLocalDB |
SQL Server Express LocalDB en Windows. La conexión no está cifrada, ni siquiera con Encrypt=Mandatory, y Encrypt=Strict falla. |
| Canalización con nombre | Server=np:\\sql.example.com\pipe\sql\query |
Una conexión de tubería con nombre en Windows. |
Utiliza tcp:, un nombre de host totalmente cualificado y un puerto explícito en producción. Utiliza un nombre DNS que coincida con el certificado del servidor, no una dirección IP, porque la validación del certificado compara el nombre del servidor en la cadena de conexión con los nombres del certificado.
Cuando te conectas a Azure SQL Database con autenticación SQL y un nombre de usuario con el formato user@servername, la parte servername debe coincidir con el servidor en Server.
Para un oyente de grupo de disponibilidad o una instancia de clúster de conmutación por error, revisa Multi Subnet Failover también las opciones de Conexión.
Configurar el cifrado y la validación de certificados
La Encrypt palabra clave acepta los siguientes valores, independientemente de mayúsculas y minúsculas:
| Value | Valor de Builder | Meaning |
|---|---|---|
Strict |
Strict |
Utiliza TDS 8.0. Cifra la conexión antes de iniciar sesión y siempre valida el certificado del servidor. |
Mandatory, true, yes |
True |
Cifra la conexión. Este valor es el predeterminado. |
Optional, false, no |
False |
Cifra toda la conexión solo cuando el servidor requiere cifrado. Cuando el servidor soporta cifrado pero no lo requiere, solo se cifra el paquete de inicio de sesión. |
Úsalo Strict cuando el servidor soporta TDS 8.0 y tiene un certificado que el cliente puede validar. Azure SQL Database y SQL Database en Microsoft Fabric lo soportan. Una conexión a LocalDB no está cifrada, ni siquiera con Mandatory, y Strict falla.
Los valores Encrypt y Trust Server Certificate se combinan de la siguiente manera:
| Cifrar | Certificado de servidor de confianza | Result |
|---|---|---|
Optional |
false |
Cuando el servidor requiere cifrado, toda la conexión se cifra y el certificado del servidor debe validarse. De lo contrario, la conexión falla. Cuando el servidor soporta cifrado pero no lo requiere, solo se cifra el paquete de inicio de sesión, y el controlador no valida el certificado del servidor a menos que la conexión use AccessToken o AccessTokenCallback. Cuando el servidor no soporta cifrado, nada está cifrado. |
Optional |
true |
Cuando el servidor requiere cifrado, toda la conexión está cifrada. Cuando el servidor soporta cifrado pero no lo requiere, solo se cifra el paquete de inicio de sesión. El controlador no valida el certificado del servidor. |
Mandatory |
false |
El cifrado solo ocurre cuando se valida el certificado del servidor. De lo contrario, la conexión falla. |
Mandatory |
true |
El cifrado siempre ocurre, pero el controlador no valida el certificado del servidor. |
Strict |
Omitido | El cifrado siempre ocurre y el certificado del servidor debe validarse. De lo contrario, la conexión falla. |
No configure Trust Server Certificate=true para corregir un error de conexión en producción. Cifra el canal pero no confirma la identidad del servidor. Limítalo a entornos de desarrollo donde no haya un certificado de confianza disponible.
Cuando el nombre del servidor en Data Source no coincide con el certificado, establece Host Name In Certificate con el nombre que figura en el certificado. SQL Client solo lo comprueba cuando el nombre del servidor no coincide y no fija ningún certificado. Para aceptar solo un certificado específico, configure Server Certificate con la ruta de un archivo PEM, DER o CER:
Server=tcp:sql.example.com,1433;Encrypt=Strict;Host Name In Certificate=sqlhost.example.com
Server=tcp:sql.example.com,1433;Encrypt=Strict;Server Certificate=C:\certificates\server.cer
Para las reglas completas de validación, véase Cifrado y validación de certificados.
Utilice la agrupación de conexiones
El pooling está activado por defecto. Cuando abres un SqlConnection, el controlador toma una conexión física de un pool que coincida con la conexión solicitada. Cuando cierras o liberas la conexión, la conexión física regresa al pool en lugar de cerrarse. Una apertura reutilizada salta la conexión de red, el handshake TLS y el inicio de sesión.
Siga estas reglas:
Abre una conexión justo antes de necesitarla y deshazla tan pronto como termines, con
usingoawait using. Una conexión que no se elimina se queda revisada, y la piscina puede quedarse sin ella.Construye la cadena de conexión una vez al arrancar y reutilala. La clave del pool incluye el texto exacto de la cadena de conexión, por lo que un orden de palabras clave diferente, un sinónimo o un valor por petición como un ID de solicitud o un nombre de usuario crea un pool separado. El constructor escribe una única forma canónica. Para más información, véase Mantener una cadena de conexión canónica.
Espera un pool separado para cada identidad de Windows bajo autenticación integrada, cada SqlCredential instancia y cada AccessToken valor. Utiliza un método proporcionado
Authenticationpor el driver o uno reutilizado AccessTokenCallback en lugar de configurarAccessTokenen cada conexión.Busca conexiones que no estén eliminadas antes de que subas
Max Pool Size, que por defecto es 100. Cuando todas las conexiones de un pool están en uso,Openespera hastaConnect Timeouty luego lanza InvalidOperationException:Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.Planifica la capacidad de los servidores para cada pool. Cada proceso, o cada dominio de aplicación en .NET Framework, tiene sus propios pools. Las conexiones al servidor pueden multiplicarse
Max Pool Sizepor los pools en cada proceso y por el número de instancias de aplicación.No configures
Pooling=falsepara evitar un problema de pooling. Cada vez que se abre, se realiza un inicio de sesión completo.
Para cerrar conexiones agrupadas que permanecen inactivas demasiado tiempo, véase Limitar el tiempo de inactividad de conexión. Para claves de pool, tamaño, compensación y transacciones, consulta SQL Server connection pooling.
Configuración de conexión y de comandos por separado
Una cadena de conexión controla el establecimiento de la conexión y el comportamiento de la sesión. Un comando controla una operación SQL.
| Requirement | Configurar en |
|---|---|
| Tiempo permitido para establecer una conexión o conseguir una del grupo |
Connect Timeout palabra clave |
| Tiempo de espera por defecto para los comandos en la conexión |
Command Timeout palabra clave |
| Tiempo de espera para un comando | CommandTimeout |
| Cancelación por parte del llamante |
CancellationToken pasada a métodos asíncronos |
| Política de reintento para abrir una conexión o ejecutar un comando |
Lógica de reintento configurable en SqlConnection o SqlCommand |
Un tiempo de espera más largo no sustituye la lógica de reintentos. Un tiempo de espera limita una espera. Un reintento inicia otro intento, y debe estar acotado y poder repetirse de forma segura.
Informa de la identidad de la aplicación
Application Name establece el nombre que el servidor reporta a través de APP_NAME(). Utiliza un nombre estable para cada carga de trabajo desplegada. Los frameworks y herramientas que abren conexiones para una aplicación también pueden reportarse a sí mismos a través de la propiedad RegisteredApplication, que no tiene ninguna palabra clave de cadena de conexión. Para más información, consulte Reportar la identidad de la aplicación.
Construye cadenas de conexión de forma segura
Usa SqlConnectionStringBuilder cuando el código añade o cambia un valor. No unas texto no confiable en una cadena de conexión, porque un punto y coma en ese texto puede añadir o reemplazar una palabra clave. El constructor valida valores, asigna sinónimos a palabras clave canónicas y pone entre comillas cada valor para que el valor no pueda añadir palabras clave. Para ejemplos, véase Constructores de cadenas de conexión.
Almacenar información de conexión fuera del código
Carga cadenas de conexión desde el sistema de configuración de la aplicación. Las aplicaciones .NET suelen usar variables de entorno, secretos de usuario para desarrollo local, Azure App Configuration y Azure Key Vault.
Siga estas reglas:
- No commitas contraseñas, secretos de clientes, tokens de acceso ni cadenas de conexión de producción.
- Prefiera un método de autenticación que no necesite contraseña en la cadena de conexión.
- Restringir el acceso a la fuente de configuración.
- Rota los secretos almacenados y reinicia o recarga las aplicaciones que los almacenan en caché.
- No escribas cadenas de conexión en registros, excepciones, trazas o telemetría.
- Deje
Persist Security Info=false, el valor predeterminado, para que una conexión abierta no exponga la contraseña a través de su propiedadConnectionString.
Para proveedores de configuración .NET, véase Configuración en .NET. Para más controles, consulta Protección de la información de conexión.
Reglas de análisis
El conductor aplica estas reglas:
- Las palabras clave no distinguen mayúsculas de minúsculas.
DATABASE,Database, ydatabaseson la misma palabra clave. - Muchas palabras clave tienen sinónimos.
ServeryData Sourcefijan el mismo valor. El artículo de Opciones de Conexión enumera los sinónimos de cada palabra clave. - Cuando una palabra clave aparece más de una vez, gana el último valor. Los sinónimos cuentan como la misma palabra clave.
- El controlador ignora los espacios alrededor de palabras clave y de valores no comillados.
- Un punto y coma final es opcional.
- Una palabra clave que el controlador no reconoce genera ArgumentException junto con el mensaje
Keyword not supported.
Los valores pueden ser sensibles a mayúsculas y mayúsculas, dependiendo de la palabra clave. Una contraseña distingue entre mayúsculas y minúsculas.
Encrypt=STRICT y Encrypt=strict son lo mismo.
Este programa muestra cómo el generador normaliza palabras clave, resuelve un duplicado y cita caracteres especiales. La pestaña .NET Framework utiliza C# 7.3. Para crear un proyecto que ejecute las muestras, consulta Crear el proyecto.
using Microsoft.Data.SqlClient;
// Synonyms and keyword case are normalized to canonical keywords.
var parsed = new SqlConnectionStringBuilder(
"server=tcp:sql.example.com,1433;DATABASE=Orders;uid=app_user;encrypt=yes;timeout=30");
Console.WriteLine(parsed.ConnectionString);
// When a keyword repeats, the last value wins.
var duplicate = new SqlConnectionStringBuilder(
"Server=sql.example.com;Database=Orders;Database=Archive");
Console.WriteLine($"InitialCatalog: {duplicate.InitialCatalog}");
// The builder quotes values that contain delimiters.
var quoted = new SqlConnectionStringBuilder
{
DataSource = "sql.example.com",
UserID = "app_user",
Password = "a;b'c\"d",
};
Console.WriteLine(quoted.ConnectionString);
Console.WriteLine($"Round trip: {new SqlConnectionStringBuilder(quoted.ConnectionString).Password == quoted.Password}");
La salida es la siguiente:
Data Source=tcp:sql.example.com,1433;Initial Catalog=Orders;User ID=app_user;Connect Timeout=30;Encrypt=True
InitialCatalog: Archive
Data Source=sql.example.com;User ID=app_user;Password="a;b'c""d"
Round trip: True
La primera línea muestra cada sinónimo reemplazado por su palabra clave canónica: server por Data Source, DATABASE por Initial Catalog, uid por User ID, y timeout por Connect Timeout.
Valores entre comillas
Encierra un valor entre comillas dobles (") o comillas simples (') cuando contiene punto y coma, comienza o termina con un espacio, o comienza o termina con comillas. Dentro de un valor entrecomillado, escribe dos veces la comilla que lo delimita.
| Value | Forma de cuerda de conexión |
|---|---|
a;b |
Password="a;b" |
abc' |
Password="abc'" |
say "hi" |
Password='say "hi"' |
a;b'c"d |
Password="a;b'c""d" |
Las normas de presupuesto son fáciles de equivocar. Fija los valores a través de SqlConnectionStringBuilder las propiedades y deja que el constructor los presupuesta. Para más información, consulta Construir cadenas de conexión de forma segura.
Especificar valores booleanos
Las palabras clave que toman un valor booleano aceptan true, false, yes y no, independientemente de mayúsculas/minúsculas.
Integrated Security también acepta sspi, lo que significa true. El constructor escribe True o False.
Utiliza palabras clave de otros conductores
Microsoft. Data.SqlClient no acepta palabras clave ODBC u OLE DB como Driver y Provider. Elimina estas palabras clave cuando muevas una cadena de conexión desde otro controlador.
System.Data.SqlClientLas cadenas de conexión funcionan en Microsoft.Data.SqlClient, con estas diferencias:
-
Encryptse establece de forma predeterminada enMandatoryen Microsoft.Data.SqlClient. Un servidor sin un certificado de confianza no supera la validación del certificado. Instala un certificado de confianza en el servidor. - En .NET,
Network Library,Connection Reset, yTransparent Network IP Resolutionno están soportados. Elimínelos. -
Context Connection=trueno es compatible. -
Asynchronous Processingno es una palabra clave soportada y lanzaArgumentException. Quítelo. Los métodos asíncronos funcionan sin ello. -
Type System Version=SQL Server 2000no es compatible. Crear la conexión lanzaArgumentException. UsaLatest,SQL Server 2012,SQL Server 2008, oSQL Server 2005.
Contenido relacionado
- Usa Microsoft. Data.SqlClient en una app .NET
- Opciones de conexión
- Generadores de cadenas de conexión
- Conectarse a un origen de datos
- Agrupación de conexiones a SQL Server
- Autenticación de Microsoft Entra ID
- Cifrado y validación de certificados
- Instancias de usuario de SQL Server Express
- Ciclo de vida de soporte del controlador SqlClient