Tek bir saklı yordam için yürütme izni nasıl veriyorsunuz?


40

Normalde saklı bir prosedür oluşturduğumda, aşağıdakileri sıralama şablonu olarak kullanıyorum.

Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..> 
as begin

 <procedure>

end

Çalıştığım sırada yalnızca bu saklı yordamdayken yürütme izni vermenin bir yolu var mı?
Mesela ...

Grant execute [User_Execute] 

... ama sadece bu saklı yordam için?

Başka bazı benzer sorular gördüm ama hepsi sadece bir tanesini değil, create procedurebetiğin içinde izinleri belirleyebileceğiniz bir tanesini de görmedim . Belirli saklı yordamlar için GUI olmadan izinleri nasıl ayarlayabileceğim hakkındaki cevaplar bile memnuniyetle karşılanacaktır.

Düzenleme En iyi cevap kesinlikle doğru yöne işaret etti, bu aslında aradığım şeydi, yaptığım komutları topluyordum, yaptığım komutları topluyordum, komutları saklı yordamla birlikte topluyordum. Her neyse, bence oldukça kaygan.

Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..> 
as begin

<procedure>

end
GO
GRANT EXECUTE ON <procedurename> to <username>
GO

Düzenlenmiş metinde verilen kod geçerlidir ve bu sorunun doğru cevabıdır.
saat doksan9,

Yanıtlar:



10

kesilmiş tablo Saklı yordamlar gibi nesnelere ayar izni verilebilir:

GRANT EXECUTE ON <schema>.<object> to <user>;

Ancak hem giriş hem de kullanıcı düzeyinde güvenlik hakları vermek isteyebilirsiniz. SADECE erişim gerektiren nesneler (yürütme gibi) için gerekli hakları belirlemek ve vermek isteyeceksiniz. Kullanımını düşünün EXECUTE ASaltındaki nesnelerin (örneğin tablolar) tüm gerekli tüm hakların zorunda OLMADAN kod çalıştırmak için gerekli olan doğrulamak izinlerine başka bir kullanıcı taklit sağlayan yeteneği. EXECUTE ASDepolanan prosedürlere, fonksiyonlara, tetikleyicilere vb. eklenebilir.

Depolanan Prosedürde aşağıdaki gibi koda ekleyin:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER

Bu durumda, çağrılan modülün sahibini taklit ediyorsunuz. Ayrıca, SELF, VEYA modülü oluşturan veya değiştiren kullanıcının VEYA ... imperonate CALLER'i taklit edebilir; VEYA adı verilen yordamın sahibi 'kullanıcı_adı' kimliğine bürünecek, bu da belirli bir kullanıcı kimliğine bürünecek.

Çoğu zaman, yalnızca EXECUTEdepolanmış işlemlere haklar vermeniz gerekir ve ardından saklanan işlem içinde referans verilen tüm nesnelere haklar verilir.

Bu şekilde, örtülü haklar vermenize gerek YOK (örneğin: verileri güncellemek veya ek işlemleri çağırmak için). Mülkiyet zinciri, bunu sizin için halleder. Bu özellikle dinamik sql için veya bunun gibi yüksek güvenlikli görevler oluşturmanız gerektiğinde faydalıdır CREATE TABLE. EXECUTE ASbunlar için dikkat edilmesi gereken kullanışlı bir araçtır.

Bu örnek, tüm bunları netleştirmeye yardımcı olabilir:

Bir veritabanına ortak erişimi olan NoPrivUser adlı bir kullanıcı oluşturun (örn. Dbadb):

USE [master];
GO 
CREATE LOGIN [NoPrivUser] WITH PASSWORD=N'ABC5%', DEFAULT_DATABASE=[dbadb], 
  CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
GO 
USE [DBAdb];
GO 
CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser];
GO

NOT: BU PROSEDÜRÜN YARATICISI VEYA SAHİPLERİ, hedef veri tabanı içinde TABLO HAKLARI OLUŞTURACAKTIR.

use DBAdb 
go 
CREATE PROCEDURE dbo.MyProcedure 
WITH EXECUTE AS OWNER 

truncate table MyTable

GO
GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; 
GO
-- Now log into your database server as NoPrivUser and run the following.

Yan EXECUTE AStümce ile saklı yordam nesne sahibinin bağlamında çalıştırılır. Bu kod başarıyla oluşturulur dbo.MyTableve satırlar başarıyla eklenir. Bu örnekte, kullanıcı NoPrivUser, tabloyu değiştirmek veya bu tablodaki verilerin hiçbirini okumak veya değiştirmek için hiçbir hak vermemiştir.

Sadece bu prosedür kapsamında ININ kodlu bu özel görevi tamamlamak için gereken hakları alır.

Bu hakları kalıcı olarak atamaksızın yüksek güvenlik hakları gerektiren görevleri gerçekleştirebilecek saklı yordamlar oluşturma yöntemi çok faydalı olabilir.


4
Bu, dün SO’ya gönderdiğiniz ve aynı zamanda okunabilirlik için biçimlendirmem gereken cevap .
Aaron Bertrand

5

görüntü tanımını buraya girin

veritabanı girişini seçin -> Güvenli'ye gidin ve önceki resimde olduğu gibi Ara düğmesini tıklayın. Ara düğmesine tıklandığında, nesnenin türünü eklemek için takip eden pencereyi göreceksiniz.

Nesne Türleri düğmesine tıkladığınızda çeşitli nesnelerden oluşan “Nesne Türlerini Seç” penceresini göreceksiniz. Şimdi görürseniz, saklı yordam nesne türleri alanında listelenir. Şimdi izin vermek istediğimiz belirli saklı prosedürümüzü seçeceğiz.


İlk olarak, soruyu cevapladığınızda soru beş yaşın üzerindeydi. OP, GUI kullanmayan ve bir betiğe gömülebilen çözümler için özel olarak sorulanlar dışında, bu iyi olurdu. Cevabınız buna değinmiyor.
Eric Brandt
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.