Muszę ograniczyć dostęp do konkretnego użytkownika, ale nadal muszą widzieć dane w tabelach należących do dbo.
Próbuję wykonać następujące czynności:
- Schemat dbo działa tak, jak normalnie, ma dostęp do wszystkiego
- Schemat Schemat ma dostęp tylko do obiektów schematu 1
- jeśli widok schematu1 lub procedura składowana uzyskuje dostęp do danych w tabelach należących do dbo, łańcuch uprawnień odpowiednio
- użytkownik1 ma dostęp do schematu1 i nic więcej; z wyjątkiem przypadku # 3
Oto, co próbowałem:
- Utwórz użytkownika user1 zamapowanego na testowy login z losowym hasłem
- Utworzono kilka tabel w schemacie dbo z niektórymi danymi testowymi
- Utworzono schemat schematu 1
- Utworzono schema1.get_profiles, który wybiera z widoku o nazwie schema1.profiles, który uzyskuje dostęp do danych w dbo.people, dbo.taglinks i dbo.tags
Jednak przy użyciu następującej instrukcji podczas logowania jako użytkownik1:
EXEC get_profiles 1
prowadzi do:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Próbowałem WITH EXECUTE AS OWNER
i nie mogę zrozumieć, jak powinno działać „łańcuchowanie własności”.
Próbowałem też
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
ale pojawia się następujący błąd (pomimo tego, że jestem użytkownikiem z dostępem na poziomie dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
To, czego potrzebuję, to użytkownik1, aby móc uzyskać dostęp do danych za pośrednictwem procedur składowanych, które im daję, i nic więcej.
Ponadto ma to ostatecznie za zadanie istnieć w istniejącej bazie danych SQL Azure, ale najpierw testuję lokalną bazę danych.