Wie setzt man Berechtigungen auf schema-Objekte der Zugriff auf andere Schemata?
Ich habe 2 schemas und eines der Objekte in dem ersten schema muss für den Zugriff auf eine Objekt in das andere schema. Zum Beispiel:
CREATE VIEW I.ITest
AS
SELECT 1 as TestColumn
GO
CREATE VIEW O.OTest
AS
SELECT * FROM I.ITest
GO
EXEC ('SELECT * FROM O.OTest') AS USER = 'TestUser'
DROP VIEW O.OTest
DROP VIEW I.ITest
Im obigen Beispiel "TestUser" hat nur Zugriff auf die " O " - Schema. Also das wählen selbst funktioniert gut, aber da die Ansicht ist dabei eine Auswahl aus einem anderen schema 'ich', dann schlägt es fehl, mit der Fehlermeldung:
Die SELECT-Berechtigung verweigert wurde, auf das Objekt 'ITest', Datenbank 'MyDB', das schema 'ich'.
Dies zu umgehen, kann ich Ihnen die 'O' - schema die Berechtigung zum Zugriff auf die " ich " - schema, aber das klingt nicht richtig und sieht auch unter Umgehung der schema-Berechtigungen.
Was kann getan werden? Mache ich das alle falsch? Was ist die beste Praxis in diesem Szenario?
Dank
UPDATE: Mein schemas im Besitz von unterschiedlichen db-Rollen-also habe ich, um dieses problem, indem einfach die Besitzer der beiden zu dbo und dann geben die db-Rolle die Berechtigung zum Zugriff auf das schema. Dies bedeutete, dass der Besitzer dbo konnte alles sehen und ich könnte dann geben die ausdrückliche Genehmigung der db-Rolle nur und der rest der db-Objekte nicht verfügbar waren, es sei denn, über dieses schema. Vielen Dank für Ihre Hilfe
- Können Sie auch Ihre create user-Anweisung und das Standard-schema, dass jeder Benutzer gehört zu bitte.
- Ich habe die Benutzer in der via management studio, also nicht über ein script spielt es eine Rolle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie wickeln die Auswahl der Daten aus der Sicht auf die "anderen" - Schema, innerhalb einer gespeicherten Prozedur. Dann grant execute-Rechte auf der stored procedure. Auch wenn der Benutzer keinen direkten Zugriff auf die Sicht es erlaubt den Zugriff über die gespeicherte Prozedur.
Hier ist ein Beispiel walkthrough für Sie demonstrieren die Sicherheits-Prinzipien wie für die Arbeit:
Einen alternativen Ansatz als suggeted in meinen Kommentaren wäre die Nutzung einer Datenbank-Rolle, um den Zugriff auf mehrere Schemata. Mit den Prinzipien, wie in der Lösung oben, Sie könnte verwenden, Datenbank-Rollen, etwa so:
Einige empfohlene weiterführende Lektüre:
Administratoren
Sicherlich geben Sie Berechtigungen für Benutzer, die nicht Objekte und das ist es. Wenn Sie oder der Besitzer des anderen schema will, damit die anderen Benutzer für den Zugriff auf Objekte (ob Sie Tabellen, Ansichten oder was auch immer) darin, dann ist es bis zu dem Besitzer des anderen schema. Nur weil Sie wie die Entwickler schreiben, ein Verfahren für den Zugriff auf Objekte in anderen schemas folgt daraus nicht, dass jemand läuft Ihr Verfahren erlaubt sein sollte, dies auch tun. Rollen sind der Weg zu gehen.