2012-03-26 8 views
1

Ich habe meine Daten in SQL Server 2008 R2 in einer Datenbank namens CompanyData. Ich habe dort einige Tabellen mit Transaktionsverlauf mit vielen Details zu jeder Transaktion.Ausblenden von Details mit einer Ansicht in SQL Server 2008

Für bestimmte Berichtsbenutzer möchte ich, dass sie Berichtkapazität haben, aber viele Details verbergen.

Also ging ich voran und erstellte eine neue Datenbank, DBReport, und erstellte eine Ansicht, die nur bestimmte Spalten aus den Tabellen auswählt. Beispiel: SELECT field1, field2, field3 aus [CompanyData]. [Dbo]. [TableA] ...

Ich habe einen neuen Benutzer und ein neues Login erstellt (ich gestehe, dass ich den Unterschied nicht verstehe, Da ich sie immer zusammen erstelle), wird das ReportingUser NUR mit der Rolle db_datareader in DBReport aufgerufen.

Das Problem ist, dass, wenn ich einen Bericht als dieser begrenzte Benutzer ausführen, kommt es mit einem Fehler zurück, der besagt, dass dies unter der aktuellen Sicherheit nicht geschieht.

Also meine Frage kommt darauf, wie ich in der Ansicht angeben, um sich an CompanyData mit einem gültigen Benutzer in CompanyData anmelden. Ich weiß, dass ich ReportingUser auch in CompanyData erstellen kann, aber genau das möchte ich vermeiden.

Ich hoffe, ich bin nicht hier, so ist verwirrend ...

Dank!

+0

Grundsätzlich * Logins * gehören zum Server, * User * gehören zu Datenbanken (technisch hat jede Datenbank ihre eigenen Benutzer, obwohl es in der Praxis durchaus ein und dasselbe Set sein kann). Es ist möglich, Zugriff auf den Server zu haben (Login) und keinen Zugriff auf eine bestimmte Datenbank zu haben (in diesem DB ist kein Benutzer mit Ihrem Login verbunden). –

Antwort

2

lesen über Besitzkette here (es eine sehr gute Erklärung hat)

Ich denke, das Problem in Ihrem Fall ist, wer der Eigentümer der Objekte ist. Wahrscheinlich hat Ihre Sicht auf DBReport einen anderen Eigentümer als Ihre [CompanyData]. [Dbo]. [TableA] -Tabelle. Sie haben also eine Berechtigung für die Ansicht, aber sie ist nicht mit der Tabelle A verknüpft, da sie unterschiedliche Besitzer haben.

Sie können dies lösen, indem Sie dem ReportUser für Tabelle A eine Berechtigung hinzufügen.

über Benutzer und Logins, im Grunde sind Anmeldungen auf Instanzebene und Benutzer sind auf einem Datenbankebene

+0

Verzeihen Sie meine Unwissenheit, Don Diego, wie kann ich sehen, wem was gehört? Und wenn möglich, wie ändere ich das? (Kann ich das Objekt an einen neuen Besitzer verkaufen :-)) – Amarundo

+0

Großartiger Link, den Sie mir über die Besitzkette gegeben haben, übrigens. – Amarundo

+0

froh zu helfen. Dieser Proc kann den Besitzer eines Objekts ändern: sp_changeobjectowner 'alter_besitzer', 'neuer_besitzer' In Ihrem Fall ist dbo der Eigentümer des TableA-Objekts – Diego

0

Run up-Manager SQL Server verbinden, wie Ihr begrenzten Bericht Benutzer Neue Abfrage, Einfügen in der SQL aus dem Innern der Ansicht . Sieh was es sagt. Übliches Problem sind Verweise, Sie haben Zugriff auf Tabelle2, aber nicht Tabelle1, es hat einen Fremdschlüssel oder ähnliches.

Stellen Sie sicher, dass Sie für alle Tabellen, die von der Ansicht berührt werden, ausgewählte Tabellen und Referenzen haben, die alle Tabellen einschließen, auf die UDFs oder SPs (oder andere von ihr verwendete Ansichten) verweisen.

PS verwendet dieser Bericht nur diese Ansicht?