Saklı yordamların yürütülmesine izin verilir, ancak yazılmaz?


11

SQL Server 2012 örneğimde "okuma" kullanıcısı kurmak istiyorum. Ona tüm tablolardan ve görünümlerden veri alır, ancak güncellemek veya eklemek (yani bir şey okumak ve hiçbir şey yazmak) için herhangi bir saklı yordam veya işlev veya doğrudan SQL deyimi yürütme hakkına izin vermek istiyorum.

Bunu, her bir işleve veya saklı yordama özel olarak ad vermeden ayarlayabilir, ancak daha ziyade herhangi bir işlev veya saklı yordamda yürütme izni verebilir, sadece tabloları değiştirme hakkını ortadan kaldırabilir miyim?

Bunun yerine SQL Server 2008 çalıştırırsam bir şey değişecek mi?

Açıklamalar ve eklemeler:

  1. Saklı yordam veri değiştirirse, kullanıcı bir hata iletisi almalıdır (ya değişikliği reddetme ya da saklı yordama erişimi tamamen reddetme).
  2. Potansiyel bir çözüm izinleri reddetmeyi içeriyorsa, reddetmek yerine belirli izinler veremez miyim?
  3. Bir reddetme, veritabanındaki tüm tablolara, görünümlere vb. (Şimdi ve gelecekte mevcuttur) tek bir ifadeyle uygulanabilir mi?

Burada
yeniyim

1
@KrisGruttemeyer o düşünce - bunu yürütebilirdi ama bir çeşit hataya neden olurdu; Alternatif olarak ben onu çalıştırmak için ayrıcalıkları vardır sp's bir listesini belirtmek zorunda olmadığı sürece onu yürütmek için izin verilmiyor Tamam
gt6989b

1
Bu durumda SQL Server izinleri hakkında bilgi edinmeniz gerekir. İzin GRANTvermek, izinleri DENYreddetmek ve REVOKEbir GRANTveya kaldırmak için 3 izin değişkeni vardır DENY. Bir GRANTveya DENYkullanıcı olmadan , örneğin saklı yordama erişerek izinleri devralabilir.
JNK

1
@ gt6989b DENY DELETE, INSERT, UPDATEBir veritabanı veya şema kullanıyorsanız, bunun yalnızca tabloları ve görünümleri etkileyeceğine inanıyorum.
JNK

1
@ gt6989b - Bu yorumlarda önerilen cevabın yanlış olduğu ortaya çıktı. Paul White'ın tepkisine bakın.
RLF

Yanıtlar:


15

Bunu başarmak düşündüğünüz kadar kolay değil. Bunun bir yolu, yeni bir kullanıcı tanımlı veritabanı rolü oluşturmak, bu rol için gereken tüm izinleri vermek ve ardından yeni role kullanıcılar eklemektir. Bu, en azından kullanıcılara (veya kullanıcı tanımlı diğer rollere) gelecekte bu izin kümesini vermeyi kolaylaştırır. Aşağıdaki adımlar iyi bir başlangıçtır:

-- The user-defined role containing all required permissions
CREATE ROLE Readers AUTHORIZATION dbo;

-- Give read-only access to all tables,
-- views on those tables, and in-line
-- functions
ALTER ROLE db_datareader ADD MEMBER Readers;

-- Example: add a user (Bob) to the role
ALTER ROLE Readers ADD MEMBER Bob;

Bundan sonra, Bob veritabanında geniş salt okunur ayrıcalıklara sahip olacaktır. Tüm tablolardan, bu tablolardaki görünümlerden ve satır içi işlevlerden okuyabilecektir. Bununla birlikte, herhangi bir prosedürü yürütemez veya satır içi olmayan işlevleri kullanamaz.

Okuyucuların erişmesini istediğiniz güvenli işlevler ve yordamlar için Okuyucular rolüne belirli izinler vermeniz gerekir. Bu işlemi kolaylaştırmak için atabileceğiniz adımlar olabilir (nesneleri bir şemada gruplamak ve şemada tek tek nesneler yerine yürütme izni vermek gibi) ancak burada ele alınacak çok fazla ayrıntı vardır.

Dikkat edilmesi gereken bir şey, veri değiştirme ayrıcalıklarının bulunmamasının, bir Reader'ın kendisine izin verilen saklı bir prosedürle veri değiştirmesini engellemeyeceği, değiştirilen prosedür ve nesne ortak bir sahibi paylaşıyorsa. Bu durumda da açık bir inkar edilmeye saygı duyulmaz. Bu özellik Sahiplik Zinciri olarak bilinir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.