2010-11-09 8 views
22

üzerinde sık sık bir GÖRÜNÜM biri amacı güvenliği olduğunu okuyun. Bu düşünceyle, harici kullanıcılara kısıtlı veri setleri sağlayan birkaç görünüm tasarladım.Grant SEÇ bir görünümde izin değil, altta yatan nesneler

Hepsi çok güzel, ama pratikte bu çalışmıyor. Ben bir görünümde SELECT izni sonra ben de bütün temel nesneler üzerinde SELECT vermediğiniz sürece, kullanıcılar erişemez. Saklı yordamlar için aynı hikaye. Net sonuç işlevsel değil, çünkü yanlış verilere, yanlış kullanıcılara erişim sağlamaya devam ediyorum. Çünkü bir nesneyi unutmak çok kolay ve kullanıcılar geri çekilmekten şikayetçi oluyorlar. iş".

çok altında yatan nesneleri göstermek zorunda kalmadan SELECT bir görünüm izinlerini veya yordamını vermek için bir yolu var mı?

+2

erişen tabloları reporting.MyViewName sahibi kullanıcı bakın http://stackoverflow.com/questions/368414/grant-select-on-a-view-not-base-table – stuartd

+0

Evet, en ilk önce bunun benim sorunum olmadığını düşündüm. Ama bu; – thomaspaulb

cevap

21

mu görünümü de altta yatan tabloları kendi sahibi olan aynı kullanıcı? Aksi halde, tabloların sahibi, İZİ SEÇENEĞİ İLE görüntü sahibi izni vermelidir. Aynı kullanıcının hem tabloları hem de görünümü varsa, o zaman izin vermesi yeterli olmalıdır.

+1

Ah, şimdi neler olduğunu anlıyorum. İki veritabanım var ve sorunlar yalnızca bir veritabanında tanımlanmış bir görünümde diğer veritabanına başvurular eklerseniz ortaya çıkar. Bu sahiplik ile ilgili. sahipleri farklı olduğunda bile, biz sadece seçmek daha fazlasını yapmak için izinleri veriyoruz GRANT izni vererek – thomaspaulb

+0

- Bu o (alttaki nesneye erişim izni vermeden) bu tür durumlarda işe gitmek için tek yoldur? – rogersillito

2

Sen this forum faydalı bilgiyi bulabilirsiniz. saklı prosedürler için, prosedüre EXEC verilmesi gerektiğini -

CREATE USER [Reports] FOR LOGIN [Reports] WITH DEFAULT_SCHEMA = Reports 
CREATE SCHEMA Reports AUTHORIZATION Reports --Auth as Reports was the key piece of information that I had missed. 
GO 
CREATE ROLE Reporting AUTHORIZATION db_securityadmin 
GO 
exec sp_addrolemember @rolename = 'Reporting', @membername = 'Reports' 
GO 
GRANT CREATE VIEW TO Reporting 
GRANT CREATE TABLE TO Reporting 

GRANT SELECT, VIEW DEFINITION ON [dbo].[zName] TO Reporting; 

Bilginize:

son yazılan bir görünüme izinleri vermek için çalıştırmak ne ayrıntılarını ancak temel tabloları vardır. Tabloda farklı bir şemada görüşlerinizi varsa

1

, böyle görünüme "İZİN", tablolar sahibini baz tabloya erişim vermeniz gerekir ya:

ALTER AUTHORIZATION ON reporting.MyViewName TO dbo 

dbo yukarıdaki örnekte

İlgili konular