Bevor ich einfach eine wirklich schreckliche Überprüfungsbeschränkung für die Katalogtabelle aufstelle, wollte ich zuerst einige bessere Ideen einholen.
Ich möchte sicherstellen, dass alle freigegebenen Datenquellen auf unserem Berichtsserver für "/ Data Sources" bereitgestellt werden. Hin und wieder wird ein Fehler fälschlicherweise in einem anderen Verzeichnis bereitgestellt (insbesondere, wenn es sich um einen Bericht handelt, der von SSRS 2000 aktualisiert wurde und bei dem kein anderer Speicherort für die Datenquellenangabe angegeben werden konnte).
Ich kann dem Katalog ( Type != 5 OR ParentID = 'GUID of /Data Sources directory'
oder ähnlichem) eine hässliche Prüfbeschränkung auferlegen , wenn es darauf ankommt, aber wenn es eine bessere Option gibt, würde ich das lieber verwenden.
Antworten:
Warum nicht die Berechtigungen ändern, damit Benutzer keine Datenquellen für etwas anderes als diesen Ordner bereitstellen können?
Entfernen Sie daher "Datenquellen verwalten" aus allen Ordnern mit Ausnahme von
/Data Sources
. Dies kann auf Stammebene erfolgen und anschließend benutzerdefinierte Berechtigungen festlegen/Data Sources
Möglicherweise müssen Sie hierfür eine benutzerdefinierte Rolle einrichten, wenn Sie die vorhandenen nicht ändern können.
quelle
Ich glaube nicht, dass MS tatsächlich etwas über die zugrunde liegende SSRS-Datenbank garantiert, also betreten Sie nicht unterstütztes Gebiet, indem Sie tatsächlich damit friggen. Im Allgemeinen wird so etwas auf Produktionsservern am besten vermieden.
Sie können Datenquellen und andere Berichtsserver-Metadaten programmgesteuert über eine von SSRS bereitgestellte Webdienst-API abfragen. Mit der API können Sie die Ordner, die nach gemeinsam genutzten Datenquellen suchen, an Orten durchsuchen, an denen sie nicht sein sollen.
Jagd- und Ausnahmemeldungen sind wahrscheinlich der beste Weg, um damit umzugehen, anstatt zu versuchen, sie an der Quelle zu verhindern. Sie können auch die Berichtsmetadaten abfragen, um nach Berichten mit Verweisen auf Quellen außerhalb der angegebenen Bereiche zu suchen. Auf diese Weise können Sie die Autoren aufklären.
MS bietet ein Dienstprogramm namens
rs.exe
, mit dem Sie Skripts schreiben können, um dies in VB.NET zu tun. Spätere Versionen unterstützen möglicherweise auch C #, aber ich habe dies mit nichts Neuerem als SSRS 2005 getan. Im Wesentlichen wird Ihr Skript mit ein wenig Boilerplate über- und beendet, kompiliert und dann ausgeführt.Einige Dokumentationen zum
rs.exe
Dienstprogramm und zur SSRS-Webdienst-API finden Sie hier , hier und hier.quelle
Nur um eine Idee zu veröffentlichen: In unserer Umgebung haben die Berichtsentwickler Zugriff auf die Quellendatenbank, die Berichtsbenutzer jedoch nicht. Alle unsere Datenquellen werden in einem einzigen Ordner bereitgestellt und ein Dienstkonto wird zur Authentifizierung dieser Datenquelle verwendet.
Die Berichtsentwickler kennen das Kennwort des Dienstkontos nicht.
Wenn ein Berichtsentwickler bei dieser Einrichtung eine Datenquelle an einer anderen Stelle bereitstellt, funktioniert der Bericht nicht für Berichtskonsumenten, sondern nur für andere Entwickler. (Technisch gesehen müssen sie immer "Datenquelle nicht überschreiben" verwenden, oder alle Berichte werden durcheinander gebracht, bis der Administrator die "neue" Datenquelle mit dem Dienstkonto ändert.)
Hoffe das hilft!
quelle
CREATE LOGIN secret_admin ...
in eine Berichtsabfrage und bringen Sie dann jemanden mit Systemadministrator dazu, sie