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 AS
altı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 AS
Depolanan 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 EXECUTE
depolanmış 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 AS
bunlar 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 AS
tümce ile saklı yordam nesne sahibinin bağlamında çalıştırılır. Bu kod başarıyla oluşturulur dbo.MyTable
ve 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.