2009-03-05 13 views

Antwort

1

Umschließen Sie den Aufruf in einer gespeicherten proc oder Tabellenwertfunktion, und verwenden Sie EXECUTE AS OWNER (unter der Annahme dbo.nameofcodeobject).

Andernfalls müssen Sie MetaData Visibility Schutz für den gesamten Server

Sie können nicht abschalten AS Ansichten EXECUTE verwenden, die hier nützlich sein würde ...

bearbeiten, basierend auf Kommentar.

Von sys.database_principals:

In SQL Server 2005 und späteren Versionen die Sichtbarkeit der Metadaten in Katalogansichten beschränkt sich auf sicherungsfähige Elemente , die ein Benutzer entweder besitzt oder auf denen der Benutzer erteilt wurde etwas Erlaubnis. Weitere Informationen finden Sie unter Konfiguration der Metadatensichtbarkeit.

  • dbo besitzt alles so alles sieht
  • Berechtigungen können nicht gewährt werden, weil es keine „GRANT VIEW SECURITY“
seine
+0

Das Problem ist, dass ich auf die sys.database_principals zugreifen müssen, wie die dbo es durch einen Blick sieht. –

+0

dbo kann alle Daten trotzdem sehen ... für andere Benutzer/Rollen müssen Sie es umbrechen. – gbn

+0

Wenn ich der Rolle/dem Benutzer in der Ansicht, die sys.database_principals aufruft, nur die von diesem Benutzer gesehenen Benutzer SELECT-Berechtigungen erteilen. –

0

Maybee ist nur mich und meine Server-Setup, aber ich bin in der Lage zu Fragen Sie die sys.database_principals ab, solange ich die connect-Berechtigung habe. Ich bin auch in der Lage, den Benutzernamen zu sehen.

Sie können Connect gewähren, indem Sie:

GRANT CONNECT TO [USER]

+0

Verbinden Sie als db_owner? – gbn

+0

Sie sehen nur die Benutzer (z. B. NT-Gruppen), denen Sie zugeordnet sind. Dasselbe gilt für sys.server_principals. db_owner und andere Rollen haben erweiterte Rechte. – gbn

+0

Nein, ich verbinde mich als SQL-Benutzer, der nur die Berechtigung connect hat. Hmm lass mich einen anderen Benutzer hinzufügen und sehen, ob ich ihn sehe – JoshBerke

Verwandte Themen