Belirli bir kullanıcıya erişimi sınırlamanız gerekiyor, ancak yine de dbo'ya ait tablolardaki verileri görebilmeleri gerekiyor.
Aşağıdakileri yapmaya çalışıyorum:
- dbo şeması normalde olduğu gibi çalışır, her şeye erişebilir
- şema1 şemasının yalnızca şema1 nesnelerine erişimi var
- bir şema1 görünümü veya saklı yordam dbo'ya ait tablolardaki verilere erişiyorsa, izinler zinciri uygun şekilde
- user1, şema1'e erişebilir ve başka bir şey yoktur; # 3 hariç
İşte denedim:
- Rastgele bir parolayla test girişiyle eşlenen bir user1 kullanıcısı oluşturun
- Bazı test verileri içeren dbo şemasında birkaç tablo oluşturuldu
- Bir şema1 şeması oluşturuldu
- Dbo.people, dbo.taglinks ve dbo.tags içindeki verilere erişen schema1.profiles adlı görünümden seçilen bir schema1.get_profiles oluşturuldu
Ancak, user1 olarak oturum açmışken aşağıdaki ifadeyi kullanarak:
EXEC get_profiles 1
sonuç:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Denedim WITH EXECUTE AS OWNERve "sahiplik zincirinin" nasıl çalıştığını anlamaya başlayamıyorum.
Ben de denedim
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
ancak aşağıdaki hatayı alıyorum (dbo düzeyinde erişime sahip bir kullanıcı olmasına rağmen):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
İhtiyacım olan veri1 verdim saklı yordamlar aracılığıyla verilere erişmek için, ve başka bir şey.
Ayrıca, bu sonunda varolan bir SQL Azure veritabanında yaşamak için tasarlanmıştır, ancak önce yerel bir kukla veritabanı karşı test ediyorum.
