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