Ich muss den Zugriff auf einen bestimmten Benutzer beschränken, er muss jedoch weiterhin in der Lage sein, die Daten in Tabellen von dbo anzuzeigen.
Ich versuche Folgendes zu tun:
- Das Dbo-Schema funktioniert wie gewohnt und hat Zugriff auf alles
- schema1 schema hat nur Zugriff auf schema1-Objekte
- Wenn eine Schema1-Ansicht oder eine gespeicherte Prozedur auf Daten in Tabellen zugreift, deren Eigentümer dbo ist, wird die Berechtigungskette entsprechend verkettet
- Benutzer1 hat Zugriff auf Schema1 und sonst nichts. außer im Fall von # 3
Folgendes habe ich versucht:
- Erstellen Sie einen Benutzer1, der einem Test-Login mit einem zufälligen Passwort zugeordnet ist
- Erstellt ein paar Tabellen im Dbo-Schema mit einigen Testdaten
- Erstellt ein Schema1-Schema
- Erstellt ein schema1.get_profiles, das aus einer Ansicht namens schema1.profiles auswählt, die auf Daten in dbo.people, dbo.taglinks und dbo.tags zugreift
Verwenden Sie jedoch die folgende Anweisung, während Sie als Benutzer1 angemeldet sind:
EXEC get_profiles 1
Ergebnisse in:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Ich habe versucht WITH EXECUTE AS OWNER
und kann nicht verstehen, wie "Eigentumsverkettung" funktionieren soll.
Ich habe es auch versucht
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
Ich erhalte jedoch die folgende Fehlermeldung (obwohl ich ein Benutzer mit DBO-Zugriff bin):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Ich brauche user1, um über die gespeicherten Prozeduren, die ich gebe, auf die Daten zugreifen zu können, und sonst nichts.
Darüber hinaus soll dies möglicherweise in einer vorhandenen SQL Azure-Datenbank ausgeführt werden, aber ich teste zuerst mit einer lokalen Dummy-Datenbank.