2016-02-13 13 views
7

Ich weiß, dass es leicht ist, sich mit einer SQL Server-Datenbank zu verbinden, aber ich bin mir nicht sicher, wie ich es aus der Ferne und zur gleichen Zeit machen soll ... mit einer sicheren Methode.C# - Sicher mit Remote-SQL Server verbinden?

SqlConnection sqlConnection = this.sqlcon(); 

SqlCommand insertCommand = new SqlCommand("use " + database_telecaster.ToString() + " SELECT Top 1 sid from dbo.Item order by sid desc", sqlConnection); 

sqlConnection.Open(); 
insertCommand.ExecuteNonQuery(); 

SqlDataReader reader = insertCommand.ExecuteReader(); 

while (reader.Read()) 
{ 
    MaxSid = (reader.GetInt64(0) + 100).ToString(); 
} 
reader.Close(); 
sqlConnection.Close(); 

SQL Server con Funktion:

public SqlConnection sqlcon() 
{ 
    var doc = new XPathDocument(Application.StartupPath + "/DBConn.xml"); 
    var navigator = doc.CreateNavigator(); 

    var serverName = navigator.SelectSingleNode("//appsettings/servername"); 

    var username = navigator.SelectSingleNode("//appsettings/username"); 
    var password = navigator.SelectSingleNode("//appsettings/password"); 
    var database = navigator.SelectSingleNode("//appsettings/database"); 

    object[] objArray = new object[] { 
      serverName , database, username , password 
    }; 

    return new SqlConnection(string.Format("Data Source={0};Initial Catalog={1};User Id={2};Password={3};MultipleActiveResultSets = True", objArray)); 
} 

Unter der Annahme, dass der SQL Server auf einem Windows VPS ist installiert und ich werde meine Software für verschiedene Menschen geben, und ich möchte sie alle zugreifen, SQL-Server ... wie kann ich das tun, ohne die Ports des SQL-Servers zu öffnen? Weil, soweit ich weiß, das Öffnen der Ports zu einem Hacking führt, da alle Leute in der Lage sein werden, sich remote mit diesem Server zu verbinden.

+2

Wenn Sie Ihre Verbindung aus Informationen aufbauen, würde ich Ihnen empfehlen, den [** 'SqlConnectionStringBuilder' **] (https://msdn.microsoft.com/en-us/library/system. data.sqlclient.sqlconnectionstringbuilder% 28v = vs.110% 29.aspx) anstatt selbst zu rollen –

Antwort

5

Diese Frage erinnert mich an mich, als ich die ersten Schritte ...

Was immer Sie tun, schließen Sie nicht direkt auf die Datenbank, da direkt verbinden würden Sie die Datenbank-Verbindungszeichenfolgen (und Passwörter speichern müssen) in deiner Anwendung ... du könntest es verschleiern, es so undurchsichtig machen wie du magst, es wird keinen Unterschied machen ... Du wirst im Wesentlichen die Schlüssel zum Schloss abgeben.

Stattdessen müssen Sie lernen, wie eine API erstellt wird, die den Client authentifiziert und im Auftrag des Clients eine Verbindung mit der Datenschicht herstellt, die angeforderten Vorgänge ausführt und das Ergebnis zurückgibt.

Persönlich würde ich ASP.NET Web API verwenden, es ist das richtige Werkzeug für den Job. Es gibt eine leichte Lernkurve, aber bleiben Sie dabei und Sie werden es in ein paar Tagen herausgefunden haben. Beginnen Sie mit diesen PluralSight videos, sie sind eine hervorragende Ressource, die dank Microsoft völlig kostenlos ist, und sie werden Sie sicherlich beschäftigen!

+0

Also, wenn ich richtig verstanden habe, wird es immer unsicher sein, so etwas zu tun, stattdessen sollte ich eine ASP.NET C# -Website erstellen und eine Funktion erstellen, mit der meine Winforms eine Verbindung herstellt und Werte zurückgibt? immer wenn ich dich habe, die SQL-Informationen sollten auf der Website statt der Anwendung gespeichert werden, richtig? –

+0

Das ist richtig, weil niemand Ihren serverseitigen Code sehen kann, also tun Sie im Wesentlichen, dass Sie Ihre Datenbank hinter einem Webdienst verstecken und bestimmte URLs offenlegen, die Ihre Anwendung verwendet, um die benötigten Daten zu erhalten –

+0

Danke für die nützlichen Links :) Noch eine Frage, wenn es Ihnen nichts ausmacht, jetzt, da meine URLs durch Dekompilieren oder andere Methoden verfügbar gemacht werden, könnte jeder auf diese Seite zugreifen und die zurückgegebenen Werte erhalten? ein Login-System zu machen, damit nur Leute, die ich möchte, dass sie die Anwendung (Server-Seite) verwenden, sollten die Arbeit tun, richtig? –