Saya perlu membatasi akses ke pengguna tertentu, tetapi mereka masih harus dapat melihat data dalam tabel yang dimiliki oleh dbo.
Saya mencoba melakukan hal berikut:
- skema dbo berfungsi seperti biasanya, memiliki akses ke semuanya
- schema1 schema memiliki akses ke hanya obyek schema1
- jika skema1 melihat atau prosedur tersimpan mengakses data dalam tabel yang dimiliki oleh dbo, rantai izin tepat
- user1 memiliki akses ke schema1, dan tidak ada yang lain; kecuali dalam kasus # 3
Inilah yang saya coba:
- Buat pengguna1 pengguna dipetakan ke login uji coba dengan kata sandi acak
- Membuat beberapa tabel dalam skema dbo dengan beberapa data uji di dalamnya
- Membuat skema skema1
- Membuat schema1.get_profiles yang memilih dari tampilan yang disebut schema1.profiles yang mengakses data di dbo.people, dbo.taglinks, dan dbo.tags
Namun, menggunakan pernyataan berikut saat login sebagai user1:
EXEC get_profiles 1
menghasilkan:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Saya sudah mencoba WITH EXECUTE AS OWNER
dan tidak bisa mulai memahami bagaimana "rantai kepemilikan" seharusnya berfungsi.
Saya juga sudah mencoba
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
tapi saya mendapatkan kesalahan berikut (meskipun menjadi pengguna dengan akses dbo-level):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Yang saya butuhkan adalah user1 untuk dapat mengakses data melalui prosedur tersimpan yang saya berikan, dan tidak ada yang lain.
Selain itu, ini dimaksudkan untuk akhirnya hidup pada database SQL Azure yang ada, tapi saya menguji terhadap database dummy lokal terlebih dahulu.