วิธีการตั้งค่าสตริงการเชื่อมต่อ SQL Server


96

ฉันกำลังพัฒนาแอปพลิเคชัน C # แบบธรรมดาฉันต้องการทราบสิ่งนี้: เมื่อฉันเชื่อมต่อแอปพลิเคชันของฉันกับ SQL Server บนพีซีฉันรู้สตริงการเชื่อมต่อ (ชื่อเซิร์ฟเวอร์รหัสผ่าน ฯลฯ ) แต่เมื่อฉันเชื่อมต่อกับอื่น พีซีสตริงการเชื่อมต่อ SQL Server แตกต่างกัน มีบัญชีทั่วไปใน SQL Server ที่มาพร้อมกับบัญชีเริ่มต้นที่สามารถเชื่อมต่อได้หรือไม่? ฉันเคยได้ยินเกี่ยวกับsaบัญชีใน SQL Server คือsaอะไร?


5
คุณไม่ต้องการใช้ชื่อผู้ใช้และรหัสผ่านเริ่มต้นของบัญชีเพื่อตั้งค่าการเข้าถึง SQL Server หรือประเภทการเชื่อมต่อใด ๆ สำหรับเรื่องนั้น
jordanhill123

4
SAmean sql server sys_adminrole
Elshan

2
คุณสามารถใช้ Windows Authentication แทนการรับรองความถูกต้องของ SQL Server ได้หรือไม่? เพื่อหลีกเลี่ยงการใช้รหัสผู้ใช้และรหัสผ่านทั้งหมด
Philip Sheard

คำตอบ:


132

.NET DataProvider - การเชื่อมต่อมาตรฐานด้วยชื่อผู้ใช้และรหัสผ่าน

using System.Data.SqlClient;

SqlConnection conn = new SqlConnection();
conn.ConnectionString =
  "Data Source=ServerName;" +
  "Initial Catalog=DataBaseName;" +
  "User id=UserName;" +
  "Password=Secret;";
conn.Open();

.NET DataProvider - การเชื่อมต่อที่เชื่อถือได้

SqlConnection conn = new SqlConnection();
conn.ConnectionString =
  "Data Source=ServerName;" +
  "Initial Catalog=DataBaseName;" +
  "Integrated Security=SSPI;";
conn.Open();

อ้างถึงเอกสาร


1
ฉันจะใช้รูปแบบนี้ แต่ใช้ผู้ใช้โดเมนได้อย่างไร ฉันจะได้รับขีดเส้นใต้สีแดงเสมอเมื่อฉันใช้user id=Domain\Unameฉันคิดว่ามันเกี่ยวข้องกับอักขระ Escape ที่ไม่ถูกต้องฉันจะทำอย่างไรให้ถูกต้อง
Wairimu Murigi

1
@Wairimu Murigi คุณต้องหนีเครื่องหมายแบ็กสแลชเช่น user id = Domain \\ Uname
John Hartley

1
@ อิทาจิ: ขออภัยสำหรับเนโครโพสต์ เราป้อนสิ่งนี้ในบรรทัดคำสั่งของ Windows โดยใช้ SQLCMD หรือไม่
MSIS

1
รหัสผ่านของฉันมี;อักขระ
Kiquenet

1
@Kiquenet คุณอาจจะลองคำพูดเดียวหรือสองครั้งเพื่อตัดมันตรวจสอบนี้ออก
Itachi

30

ที่จริงคุณสามารถใช้SqlConnectionStringBuilderชั้นเรียนเพื่อสร้างของคุณสตริงการเชื่อมต่อ ในการสร้างสตริงการเชื่อมต่อคุณต้องสร้างอินสแตนซ์อ็อบเจ็กต์จากสิ่งนั้นSqlConnectionStringBuilderและตั้งค่าคุณสมบัติด้วยพารามิเตอร์ที่คุณใช้เพื่อเชื่อมต่อกับ DataBase จากนั้นคุณจะได้รับสตริงการเชื่อมต่อจากConnectionStringคุณสมบัติจากSqlConnectionStringBuilderวัตถุดังที่แสดงในตัวอย่างนี้:

ตัวอย่างเช่น:

    SqlConnectionStringBuilder sConnB = new SqlConnectionStringBuilder ()
    {
        DataSource = "ServerName",
        InitialCatalog = "DatabaseName",
        UserID = "UserName",
        Password = "UserPassword"
    }.ConnectionString

SqlConnection conn = new SqlConnection(sConnB.ConnectionString);

คุณสามารถใช้ตัวnewดำเนินการเพื่อสร้างสิ่งนั้นโดยตรง

ตัวอย่างเช่น:

SqlConnection conn = new SqlConnection(
    new SqlConnectionStringBuilder ()
    {
        DataSource = "ServerName",
        InitialCatalog = "DatabaseName",
        UserID = "UserName",
        Password = "UserPassword"
    }.ConnectionString
);

คุณสามารถเพิ่มพารามิเตอร์มากขึ้นในการสร้างของคุณสตริงการเชื่อมต่อ โปรดจำไว้ว่าพารามิเตอร์ถูกกำหนดโดยค่าที่ตั้งไว้ในSqlConnectionStringBuilderคุณสมบัติอ็อบเจ็กต์

นอกจากนี้คุณสามารถรับสตริงการเชื่อมต่อฐานข้อมูลจากการเชื่อมต่อของ Microsoft Visual Studio ด้วย DB ที่แนบมา เมื่อคุณเลือก DB, ในคุณสมบัติของแผงจะแสดงสตริงการเชื่อมต่อ

รายการคุณสมบัติทั้งหมดของSqlConnectionStringBuilderคลาสแสดงอยู่ในหน้านี้จากไซต์ Microsoft MSDN

เกี่ยวกับผู้ใช้เริ่มต้นของ SQL Server saหมายถึง "ผู้ดูแลระบบ" และรหัสผ่านจะแตกต่างกันไปตามเวอร์ชันของ SQL Server ในหน้านี้คุณจะเห็นว่ารหัสผ่านแตกต่างกันอย่างไร

ผู้ใช้ SQL Server 2008 / R2 Express: sa รหัสผ่าน: [รหัสผ่านว่าง - เว้นฟิลด์ว่างไว้เพื่อเชื่อมต่อ]

ผู้ใช้ SQL Server 201x Express: sa รหัสผ่าน: Password123

เว็บ SQL Server 20xx หรือผู้ใช้มาตรฐาน: รหัสผ่าน: จะเหมือนกับรหัสผ่านของผู้ดูแลระบบหรือผู้ใช้รูทของคุณในเวลาที่จัดเตรียม VDS

คุณสามารถเข้าสู่ระบบด้วยผู้ใช้saในหน้าต่างล็อกอินนี้เมื่อเริ่มต้นของ SQL Server Database Manager เช่นในภาพนี้:

ตัวอย่างการเข้าสู่ระบบ


15

.NET ผู้ให้บริการข้อมูล - เส้นทางสัมพัทธ์เริ่มต้น - การเชื่อมต่อมาตรฐาน

 using System.Data.SqlClient;
 var conn = new SqlConnection();
 conn.ConnectionString = 
 "Data Source=.\SQLExpress;" + 
 "User Instance=true;" + 
 "User Id=UserName;" + 
 "Password=Secret;" + 
 "AttachDbFilename=|DataDirectory|DataBaseName.mdf;"conn.Open();

ผู้ให้บริการข้อมูล. NET - เส้นทางสัมพัทธ์เริ่มต้น - การเชื่อมต่อที่เชื่อถือได้

 using System.Data.SqlClient;
 var conn = new SqlConnection();
 conn.ConnectionString = 
 "Data Source=.\SQLExpress;" + 
 "User Instance=true;" + 
 "Integrated Security=true;" + 
 "AttachDbFilename=|DataDirectory|DataBaseName.mdf;" conn.Open();

ผู้ให้บริการข้อมูล. NET - เส้นทางสัมพัทธ์ที่กำหนดเอง - การเชื่อมต่อมาตรฐาน

using System.Data.SqlClient;
AppDomain.CurrentDomain.SetData(
"DataDirectory", "C:\MyPath\");
 var conn = new SqlConnection();
 conn.ConnectionString = 
 "Data Source=.\SQLExpress;" + 
 "User Instance=true;" + 
 "User Id=UserName;" + 
 "Password=Secret;" + 
"AttachDbFilename=|DataDirectory|DataBaseName.mdf;" conn.Open();  

ผู้ให้บริการข้อมูล. NET - เส้นทางสัมพัทธ์ที่กำหนดเอง - การเชื่อมต่อที่เชื่อถือได้

 using System.Data.SqlClient;
 AppDomain.CurrentDomain.SetData(
 "DataDirectory", "C:\MyPath\");
 var conn = new SqlConnection();
 conn.ConnectionString = 
 "Data Source=.\SQLExpress;" + 
 "User Instance=true;" + 
 "Integrated Security=true;" + 
 "AttachDbFilename=|DataDirectory|DataBaseName.mdf;" conn.Open();

11

คุณสามารถใช้สตริงการเชื่อมต่อดังนี้และคุณต้องเพิ่มชื่อฐานข้อมูลของคุณเท่านั้น

string connetionString = "Data Source=.;Initial Catalog=DB name;Integrated Security=True;MultipleActiveResultSets=True";

8

สิ่งเหล่านี้เป็นสิ่งที่ต้องกังวลเมื่อเชื่อมต่อกับ SQL Server บนเครื่องอื่น

  • โฮสต์ / ที่อยู่ IP ของเครื่อง
  • Initial Catalog (ชื่อฐานข้อมูล)
  • ชื่อผู้ใช้ / รหัสผ่านที่ถูกต้อง

บ่อยครั้งที่เซิร์ฟเวอร์ SQL อาจทำงานเป็นอินสแตนซ์เริ่มต้นซึ่งหมายความว่าคุณสามารถระบุชื่อโฮสต์ / ที่อยู่ ip ได้ แต่คุณอาจพบสถานการณ์ที่รันเป็นอินสแตนซ์ที่มีชื่อ (เช่น Sql Express เป็นต้น) ในสถานการณ์นี้คุณจะต้องระบุ hostname \ instance name


6

คุณสามารถใช้การรับรองความถูกต้องของ Windows ถ้าเซิร์ฟเวอร์ของคุณอยู่ในโดเมนหรือการรับรองความถูกต้อง Sql Sa - เป็น System Administratior ซึ่งเป็นบัญชีรูทสำหรับการรับรองความถูกต้องของเซิร์ฟเวอร์ SQL แต่เป็นแนวทางปฏิบัติที่ไม่ดีหากใช้เพื่อเชื่อมโยงกับลูกค้าของคุณ คุณควรสร้างบัญชีของคุณเองและใช้เพื่อเชื่อมต่อกับ SQL ของคุณ ในการเชื่อมต่อแต่ละชุดที่คุณเข้าสู่ระบบบัญชีของมันรหัสผ่านและฐานข้อมูลเริ่มต้นที่คุณต้องการในการเชื่อมต่อ


6

saเป็นบัญชีผู้ดูแลระบบที่มาพร้อมกับเซิร์ฟเวอร์ sql โดยค่าเริ่มต้น อย่างที่คุณทราบกันดีอยู่แล้วคุณสามารถใช้สองวิธีในการล็อกอินเข้าสู่ SQL Server

ภาพหน้าจอของ SQL Server Management Studio

ดังนั้นจึงมีสตริงการเชื่อมต่อที่เหมาะสมกับแต่ละสถานการณ์ (เช่นการพิสูจน์ตัวตนของ windows, localdb เป็นต้น) ใช้https://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx#sqlserverเพื่อสร้างสตริงการเชื่อมต่อของคุณ นี่คือแท็ก XML คุณเพียงแค่ต้องการคุณค่าของconnectionString


5

คุณต้องเข้าใจว่าเซิร์ฟเวอร์ฐานข้อมูลหรือ DBA ไม่ต้องการให้ใครก็ตามสามารถเชื่อมต่อหรือแก้ไขเนื้อหาของเซิร์ฟเวอร์ได้ นี่คือจุดประสงค์ทั้งหมดของบัญชีรักษาความปลอดภัย หากชื่อผู้ใช้ / pwd เดียวสามารถใช้ได้กับทุกเครื่องก็จะไม่ให้การป้องกัน สิ่งที่คุณเคยได้ยิน "sa" นั้นใช้ไม่ได้กับ SQL Server 2005, 2008 หรือ 2012 ไม่แน่ใจเกี่ยวกับเวอร์ชันก่อนหน้านี้ ฉันเชื่อว่ามีที่ไหนสักแห่งในช่วงแรก ๆ ของ SQL Server ชื่อผู้ใช้เริ่มต้นและ pwd เคยเป็น sa / sa แต่ก็ไม่เป็นเช่นนั้นอีกต่อไป

FYI ความปลอดภัยของฐานข้อมูลและบทบาทมีความซับซ้อนมากขึ้นในปัจจุบัน คุณอาจต้องการดูรายละเอียดของการรับรองความถูกต้องบน Windows หาก SQL Server ของคุณถูกกำหนดค่าไว้คุณไม่จำเป็นต้องมีชื่อผู้ใช้ / pwd ใด ๆ ในสตริงการเชื่อมต่อเพื่อเชื่อมต่อ สิ่งที่คุณต้องเปลี่ยนคือชื่อเครื่องเซิร์ฟเวอร์และสตริงการเชื่อมต่อเดียวกันจะใช้ได้กับทั้งสองเครื่องของคุณเนื่องจากทั้งคู่มีชื่อ db เหมือนกัน


1
sa คือบัญชี sysadmin สำหรับ SQL Server หากติดตั้งด้วยการพิสูจน์ตัวตนเซิร์ฟเวอร์ sql หรือการรับรองความถูกต้องในโหมดผสมคุณจะต้องตั้งค่าบัญชี sa สำหรับการอ้างอิงในอนาคตนี่คือคำแนะนำเกี่ยวกับวิธีตั้งค่าบัญชี sa หากไม่ได้ติดตั้งโดยเปิดการตรวจสอบเซิร์ฟเวอร์ sql ไว้
iCodeSometime

4

เราสามารถเชื่อมต่อกับฐานข้อมูล:

 uid=username;pwd=password;database=databasename;server=servername

เช่น:

string connectionString = @"uid=spacecraftU1;pwd=Appolo11;
                            database=spacecraft_db;
                            server=DESKTOP-99K0FRS\\PRANEETHDB";
SqlConnection con = new SqlConnection(connectionString);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.