2016-09-05 3 views
-1

Ich habe alte Beiträge durchgesehen, aber sehe einige widersprüchliche Informationen dazu. Ich habe eine SQL Server-Datenbank und ich spreche mit C# -Code (. NET 4.5). Ich habe gespeicherte Prozeduren verwendet, um alles in der Datenbank zu tun und die Eingaben zu parametrieren, wenn ich einen Anruf tätige.SQL Server - verhindert SQL-Injektion

Ich möchte die Datenbank sperren, so dass sie keinen SQL-Code akzeptiert und nur auf Aufrufe der gespeicherten Prozeduren reagiert. Ist das möglich?

+0

Obwohl es keine Einstellung gibt, die Ad-hoc-SQL verbietet, gewähren Sie nur EXECUTE-Berechtigungen für gespeicherte Prozeduren, die den Datenzugriff nur über Procs erlauben (unter der Annahme einer ununterbrochenen Besitzkette) und Ad-hoc-Zugriff durch nicht-privilegierte Konten verhindern . –

+0

@Dan - Ich habe mir das angesehen und es sieht so aus, als würde es funktionieren. Vielen Dank für die Antwort. – John

Antwort

0

Obwohl es keine Einstellung gibt, die Ad-hoc-SQL vollständig verbietet, können Sie nur EXECUTE Berechtigungen nur für die gespeicherten Prozeduren erteilen, die direkt vom Anwendungscode aufgerufen werden. Berechtigungen für Objekte, auf die von gespeicherten Prozeduren verwiesen wird, sind nicht erforderlich, solange die Besitzkette nicht unterbrochen ist. Dies bedeutet, dass die gespeicherte Prozedur und das referenzierte Schema/Objekte demselben Benutzer gehören (normalerweise dbo). Diese Methode verhindert den Ad-hoc-Zugriff von nicht privilegierten Konten.

Beachten Sie, dass die Besitzverkettung nicht angewendet wird, wenn dynamisches SQL mit den Procs verwendet wird. Wenn Procs über dynamisches SQL verfügen (mit sicherem SQL und parametrisiert), können Sie das Modul mit einem Zertifikat signieren, um die erforderlichen Berechtigungen innerhalb des Procs bereitzustellen, ohne Benutzern direkte Berechtigungen für Objekte zu erteilen, auf die von der dynamischen SQL-Anweisung verwiesen wird. Details und Beispiele finden Sie unter giving permissions through stored procedures.

Stellen Sie sicher, dass CommandType.StoredProcedure auf allen SqlCommand Objekten angegeben ist, um sicherzustellen, dass die Parameter separat übergeben werden müssen. Obwohl es möglich ist, gespeicherte Prozeduren unter Verwendung von CommandType.Text auszuführen, ist mehr Aufmerksamkeit für Details erforderlich, um dies sicher zu tun.

Verwandte Themen