Freigeben über


Sicheres Programmieren mit SQL-Adapter

Wie schütze ich Anmeldeinformationen, wenn ich das Visual Studio-Plug-In "Adapterdienstreferenz hinzufügen" verwende?

Wenn Sie das Add Adapter Service Reference Plug-In verwenden, um einen WCF-Client zu erstellen, müssen Sie möglicherweise einen Benutzernamen und ein Kennwort für die SQL Server-Datenbank angeben. Sie müssen die Anmeldeinformationen auf der Registerkarte Sicherheit im Dialogfeld Adapter konfigurieren eingeben. Der SQL-Adapter bietet keine Option zum Angeben des Benutzernamens und des Kennworts als Teil des Verbindungs-URI. Dadurch wird Folgendes sichergestellt:

  • Die Anmeldeinformationen werden nicht im Feld URI konfigurieren des Dialogfelds Adapterdienstverweis-Plug-In hinzufügen angezeigt, in dem jeder Benutzer mit Zugriff auf ihren Computerbildschirm sie lesen kann.

  • Die Anmeldeinformationen werden nicht in der Konfigurationsdatei angezeigt, die vom Add Adapter Service Reference Plug-In generiert wird.

    Weitere Informationen zum Generieren eines WCF-Clients mithilfe des Add Adapter Service Reference Plug-Ins, einschließlich der Eingabe eines Benutzernamens und kennworts für die SQL Server-Datenbank, finden Sie unter Abrufen von Metadaten für SQL Server Vorgänge in Visual Studio mithilfe des SQL-Adapters.

Was sind bewährte Methoden zum Festlegen von Anmeldeinformationen im Code?

WCF stellt die ClientCredentials-Klasse bereit, mit der Sie die Anmeldeinformationen konfigurieren können, die ein Clientkommunikationsobjekt, z. B. eine ChannelFactory, verwendet, um sich bei einem Dienst zu authentifizieren. Mithilfe der ClientCredentials-Klasse stellen Sie sicher, dass WCF alle Authentifizierungsmechanismen verwendet, die im Kanalstapel dieses Objekts angegeben sind, und sie auf den Austausch zwischen Ihrem Client und dem Dienst anwendet.

Da der SQL-Adapter prozessintern mit seiner verbrauchenden Anwendung gehostet wird, ist es nicht zwingend erforderlich, die ClientCredentials-Klasse zu verwenden, um Anmeldeinformationen für die Clientkommunikationsobjekte festzulegen, die die verwendende Anwendung verwendet. Es wird jedoch als bewährte Praxis angesehen, dies zu tun.

Der SQL-Adapter erfordert die Verwendung der ClientCredentials-Klasse für die programmgesteuerte Übergabe von Anmeldeinformationen. Die AcceptCredentialsInUri-Bindungseigenschaft wird vom SQL-Adapter ignoriert, um die Übergabe von Anmeldeinformationen im URI zu verhindern.

Im folgenden Beispiel wird gezeigt, wie die Credentials-Eigenschaft verwendet wird, um Anmeldeinformationen für die SQL Server-Datenbank in einer ChannelFactory festzulegen.

// Create binding and endpoint  
SqlAdapterBinding binding = new SqlAdapterBinding();  
EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");  
  
// Create the channel factory   
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpointAddress))  
  
// Set user name and password  
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open the channel factory  
factory.Open();  

Im folgenden Beispiel wird gezeigt, wie Die ClientCredentials-Klasse verwendet wird, um Anmeldeinformationen für die SQL Server-Datenbank auf einem WCF-Client festzulegen.

// Initialize a new client for the SELECT operation on the Employee table   
SqlAdapterBinding binding = new SqlAdapterBinding();  
EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");  
TableOp_dbo_EmployeeClient client = new TableOp_dbo_EmployeeClient(binding,address);  
  
// Set user name and password  
client.ClientCredentials.UserName.UserName = "myuser";  
client.ClientCredentials.UserName.Password = "mypassword";  
  
// Open the client  
client.Open();  

Wie kann ich für einen sichereren Datenaustausch über Prozessgrenzen hinweg sorgen?

Der SQL-Adapter wird prozessintern mit der Anwendung oder dem Dienst gehostet, die ihn verwendet. Da der Adapter prozessintern mit dem Consumer gehostet wird, ist es nicht erforderlich, Sicherheit für Nachrichten bereitzustellen, die zwischen dem Consumer und dem SQL-Adapter ausgetauscht werden. Wenn die verwendende Anwendung oder der Dienst jedoch Nachrichten sendet, die vertrauliche Datenbankinformationen über eine Prozessgrenze hinweg an einen anderen Dienst oder Client enthalten, sollten Sie Maßnahmen ergreifen, um einen angemessenen Schutz für diese Daten in Ihrer Umgebung zu gewährleisten. Windows Communication Foundation (WCF) bietet viele Optionen zum Schützen von Nachrichten, die zwischen Clients und Diensten gesendet werden. Weitere Informationen zum Schützen von Nachrichten, die zwischen Clients und Diensten in WCF gesendet werden, finden Sie unter Sichern von Diensten und Clients. Weitere allgemeine Informationen zu Sicherheitsfeatures, die WCF bereitstellt, finden Sie unter Windows Communication Foundation-Sicherheit.

Weitere Informationen

Sichern Ihrer SQL-Anwendungen
Bewährte Methoden zum Schützen des SQL-Adapters