Freigeben über


Sichere Programmierung mit dem SQL-Adapter

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

Wenn Sie das Add Adapter Service Reference Plug-In zum Erstellen eines WCF-Clients verwenden, müssen Sie möglicherweise einen Benutzernamen und ein Kennwort für die SQL Server-Datenbank angeben. Sie müssen anmeldeinformationen auf der Registerkarte "Sicherheit " im Dialogfeld "Adapter konfigurieren " eingeben. Der SQL-Adapter bietet keine Möglichkeit, den Benutzernamen und das Kennwort als Teil des Verbindungs-URI anzugeben. Dadurch wird Folgendes sichergestellt:

  • Die Anmeldeinformationen werden nicht im Feld " URI konfigurieren " des Dialogfelds " Adapterdienstreferenz-Plug-In hinzufügen " angezeigt, in dem jeder Benutzer, der Zugriff auf Ihren Computerbildschirm hat, diese 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 mit einem Dienst zu authentifizieren. Mithilfe der ClientCredentials-Klasse stellen Sie sicher, dass WCF alle Authentifizierungsmechanismen verwendet, die im Kanalstapel des Objekts angegeben sind, und wendet sie auf den Austausch zwischen Ihrem Client und dem Dienst an.

Da der SQL-Adapter in einem Prozess mit der verwendeten Anwendung gehostet wird, ist es nicht zwingend erforderlich, die ClientCredentials-Klasse zum Festlegen von Anmeldeinformationen für die Clientkommunikationsobjekte zu verwenden, die von der verwendeten Anwendung verwendet werden. Es wird jedoch als bewährte Methode angesehen, dies zu tun.

Der SQL-Adapter erfordert die Verwendung der ClientCredentials-Klasse zum programmgesteuerten Übergeben von Anmeldeinformationen. Die AcceptCredentialsInUri-Bindungseigenschaft wird vom SQL-Adapter ignoriert, um das Übergeben von Anmeldeinformationen im URI zu verhindern.

Das folgende Beispiel zeigt, wie Die Credentials-Eigenschaft zum Festlegen von Anmeldeinformationen für die SQL Server-Datenbank in einer ChannelFactory verwendet wird.

// 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();  

Das folgende Beispiel zeigt, wie Die ClientCredentials-Klasse zum Festlegen von Anmeldeinformationen für die SQL Server-Datenbank auf einem WCF-Client verwendet wird.

// 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 einen sichereren Datenaustausch über Prozessgrenzen hinweg bereitstellen?

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

Siehe auch

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