1

Je crée une application qui se connecte à SQL Server 2005. Elle utilise actuellement l'authentification Windows, mais j'aimerais passer à l'authentification SQL (je crois qu'elle est parfois appelée "authentification mixte") . Ma chaîne de connexion est:SQL Server 2005 Authentification SQL Chaîne de connexion

"Data Source=LOCALHOST;Initial Catalog={0};Integrated Security=SSPI" 

Ce qui est pour l'authentification Windows, mais pour SQL, je pense:

"Data Source=LOCALHOST;Initial Catalog={0};user id={1};password={2}" 

Est-ce la bonne façon? Le code suppose que:

  • {0} est le nom de la base de données
  • {1} est le nom d'utilisateur
  • {2} est le mot de passe

Je commutation à SQL authentification parce que je pense à me connecter à une instance de SQL Server sur un serveur distant - l'authentification SQL est-elle la bonne façon de le faire, et devrais-je simplement entrer l'adresse IP où "LOCALHOST" est actuellement?

Merci!

MISE À JOUR: Merci pour toutes les bonnes réponses, les gars! Toutes étaient merveilleuses et très utiles, je ne peux même pas décider à qui attribuer une "réponse acceptée", mais j'ai voté pour toutes parce qu'elles ont basculé. Merci encore!

+0

@Joel merci d'avoir réparé les tags –

Répondre

6

Vous allez dans le bon sens, mais je pense que regarder Connection Strings peut être beaucoup plus utile pour vous que toute réponse ici.

+0

Bon, c'était le site que je cherchais! Je me suis souvenu qu'il y avait un super site qui a toutes ces informations, mais je ne me souviens plus de ce qu'on m'a appelé - apparemment un nom * très * trompeur! –

1

Oui, cela fonctionnera exactement comme vous l'avez dit.

"Source de données = 11.22.33.44; Initial Catalog = {0}; ID utilisateur = {1}; password = {2}"

+0

Génial, merci! –

2

Vous pouvez également utiliser uid au lieu de "Id utilisateur" et PWD place du « mot de passe »:

"Data Source=LOCALHOST;Initial Catalog={0};uid={1};pwd={2}" 

au lieu de lOCALHOST, vous utilisez soit l'adresse IP de la machine distante, ou le nom DNS. Notez que si plusieurs instances de SQL Server existent sur l'ordinateur distant, vous devez spécifier l'instance sous Source de données - par ex. "Source de données = 11.22.33.44 \ SQLEXPRESS".

+0

Merci beaucoup. –

2

Il y a une application pour ça: SqlConnectionStringBuilder:

SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(); 
scsb.DataSource = "LOCALHOST"; 
scsb.InitialCatalog = ...; 
scsb.IntegratedSecurity = false; 
scsb.UserID = ...; 
scsb.Password = ...; 

SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(); 
scsb.DataSource = "LOCALHOST"; 
scsb.InitialCatalog = ...; 
scsb.IntegratedSecurity = true; 

Vous pouvez ensuite extraire la chaîne de connexion de la propriété ConnectionString du constructeur. Cette façon de procéder est à l'épreuve des erreurs et vous pouvez ensuite modifier d'autres propriétés telles que ConnectTimeout ou AsynchronousProcessing et vous n'aurez pas à vous souvenir de la syntaxe de la chaîne.

+0

C'est génial, mais cela rend le processus d'extraction des valeurs de configuration dans votre fichier de configuration plus difficile. – sfuqua

+0

@sfuqua: pas vraiment, puisque le con- jugateur SCSB accepte une chaîne de connexion. Lors de la construction du SCSB à partir d'une chaîne de connexion de configuration, vous validez également le format dans le processus. –

1

Si vous n'avez pas de domaine Active Directory commun entre le serveur local et le serveur distant, alors je pense que vous aurez besoin de l'authentification SQL. Cependant, si vous avez un domaine ADS commun, alors je recommande de l'utiliser – sinon vous devez soit utiliser un compte SQL commun pour tout le monde (puis utiliser un mécanisme approprié pour crypter le mot de passe) ou créer des comptes SQL séparés pour chaque utilisateur, dupliquant ainsi les données.

Soyez très prudent avec ce paramètre de catalogue initial. Si cette valeur peut être fournie par une entrée utilisateur, elle peut être utilisée pour tenter d'attaquer une autre base de données, si vous n'avez pas de bonnes validations en place pour vous protéger. Désolé si je prêche à la chorale :-).