Aracılığıyla paylaş


Içerik geçişi'nı anlama

Yürütme içeriği ile bir kullanıcı veya oturuma bağlı olan oturum açma veya yürütme (arama) bir modül.Bu ifadeyi çalıştırmak veya gerçekleştirmek için hangi izinlerin karşı eylemleri denetlenir kimliğini oluşturur.Içinde SQL Server, yürütmek içeriği başka bir kullanıcı veya oturum açma yürütmekk AS yürüterek değiştirilebilir deyim, ya da yürütmekk AS belirten bir modülde yan tümce. Sonra bağlam değiştirme, SQL Server oturum açma ve deyim veya modülü yürütmek arayan kişinin yerine bu hesap için kullanıcı izinlerini denetler. Veritabanı veya SQL Server oturumu açma için kalan oturum veya modülü yürütme veya içerik anahtarını açıkça döndürüldü kadar özellikleri.Yürütme içeriği hakkında daha fazla bilgi için bkz: Yürütme içeriği'ni anlama.

Açık içerik geçişi

yürütmek içeriği bir oturum veya modülü açıkça yürütmek AS içinde bir kullanıcı veya oturum açma adı belirterek değiştirilebilir deyim.Kimliğe bürünmeyi, aşağıdaki olaylardan biri oluşana kadar etkin kalır:

  • Oturum bıraktı.

  • Içerik, başka bir kullanıcı veya oturum açma için anahtarlamalı.

  • Içerik için önceki yürütme içeriği döndürüldü.

Açıkça başka bir kullanıcının kimliğine bürünmek için yürütmek AS kullanarak önceki sürümlerinde SETUSER için benzer SQL Server. Daha fazla bilgi için bkz:yürütmek AS SETUSER, karşılaştırması.

Açık Server-CVE-2006-düzey içeriği değiştirme

yürütmek içeriği sunucuda geçmek düzey, yürütmek AS OTURUMU kullanmak = 'login_name' deyim. Oturum açma adı bir sorumlusu olarak görünür olmalıdır. sys.server_principalsve deyim arayan özelliklerini AL belirtilen oturum açma adına izniniz olmalıdır.

Yürütme içeriği sunucuda olduğunda kimliğe bürünme kapsamını düzey, aşağıdaki gibidir:

  • Oturum belirteci için login_name örnek tarafından kimlik doğrulaması SQL Server ve bu kopya üzerinde geçerlidir.

  • Sunucu-CVE-2006-düzey izinleri ve rol üyeliklerini login_name ödenmiş.

Use GERİ ALMA deyim önceki bağlamına geri dönün.Geri DÖNDÜRME, arayanın deyim Kimliğe bürünmeyi oluştuğu aynı veritabanı içinde olmalıdır.

Örnek

Aşağıdaki örnekte, Peter Connelly, Adventure Works döngüsü, bir ağ yöneticisi oluşturmak ister bir SQL Server Jinghao Liuhas adlı yeni bir çalışan için oturum açma hesabı. Peter'ler SQL Server oturum açma oluşturmak için gereken sunucu düzey izni yok. SQL Server oturumlar, ancak açık özelliklerini Al izni adventure-works\dan1C SQL Server gerekli sunucu düzeyinde izinleri olan oturum açma. Ne zaman Peter bağlanır SQL Server, kullanıcının oturumu için yürütme içeriği türetilmiş SQL Server oturum açma. Oluşturmak için bir SQL Server oturum açma, Peter geçici olarak yürütme içeriği varsayar. adventure-works\dan1. Kullanıcının oturumu oluşturur.Son olarak, kullanıcının kendi varsayılan izinleri siler.

-- Switch execution context to the adventure-works\dan1 login account.
EXECUTE AS LOGIN = 'adventure-works\dan1';
-- Create the new login account.
CREATE LOGIN Jinghao1 WITH PASSWORD = '3KHJ6dhx(0xVYsdf';
-- Revert to the previous execution context.
REVERT;

Açık veritabanı-CVE-2006-düzey içeriği değiştirme

Içerik veritabanına geçiş yapmak için düzey, yürütmek AS KULLANıCıNıN kullanıp = 'user_name' deyim. Kullanıcı adı bir sorumlusu olarak mevcut olmalıdır sys.database_principals ve deyim arayan özelliklerini AL belirtilen kullanıcı adına izinleriniz olmalıdır.

Yürütme içeriği veritabanına olduğunda kimliğe bürünme kapsamını düzey, aşağıdaki gibidir:

  • Için kullanıcı simgesi user_name örnek tarafından kimlik doğrulaması SQL Server Geçerli veritabanında geçerli değil. Geçerli veritabanının kullanıcı kimliğe bürünme kapsam dışında kalan genişletme hakkında daha fazla bilgi için bkz: yürütmek AS'nı kullanarak veritabanı kimliğe bürünme genişletme.

  • Veritabanı-CVE-2006-düzey izinleri ve rol üyeliklerini user_name Geçerli veritabanı için ödenmiş. Sunucu-CVE-2006-düzey kimliklere kullanıcı belirteci veya rol üyeliği aracılığıyla açıkça verilen izinleri yok olarak ödenen.

Use GERİ ALMA deyim önceki bağlamına geri dönün.Geri DÖNDÜRME, arayanın deyim Kimliğe bürünmeyi oluştuğu aynı veritabanı içinde olmalıdır.

Örnek

Aşağıdaki örnekte, François Ajenstat, Adventure Works döngüsü, bir veritabanı yöneticisi karşı DBCC CHECKDB deyimini çalıştırmak ister AdventureWorksDW veritabanı, ancak kendisine, bunu yapmak için veritabanı düzeyinde izinleri yok.Ancak, kullanıcının kullanıcı özelliklerini AL izinleri yoktur dan1, gerekli izni olan bir hesap.

François bağlandığında için AdventureWorksDW veritabanı, yürütme içeriği, kullanıcının güvenlik belirteci için eşleştirir.Ifadeleri yürütmek izni, kullanıcının, birincil ve ikincil sorumluları karşı denetlenir kullanıcı simgesi.He karakterini DBCC CHECKDB çalıştırmak için gerekli izinlere sahip olmadığından deyim, He karakterini aşağıdaki deyim s yürütür.

-- EXECUTE AS USER = 'dan1';
-- Create a table in dan1's default schema
CREATE TABLE t_NewTable( data nvarchar(100) );
go
-- Revert to the previous execution context.
REVERT
go;

Örtülü içeriği değiştirme

yürütmek içeriği saklı yordam, tetikleyici, kuyruk veya kullanıcı tanımlı bir işlev gibi bir modülün örtülü olarak yürütmek AS içinde bir kullanıcı veya oturum açma adı belirterek değiştirilebilir modülünün tanımı yan tümcesinde.

Içerik modülü yürütüldüğü belirterek, hangi kullanıcı hesabının denetleyebilirsiniz SQL Server modülü tarafından başvurulan tüm nesneler üzerindeki izinleri doğrulamak için kullanır. Bu, ek esneklik ve izinleri, kullanıcı tanımlı modüller ve bu modüllerde tarafından başvurulan nesne arasında varolan nesne zinciri üzerinden yönetirken, denetim sağlar.Başvurulan nesne üzerindeki açık izinler vermek zorunda kalmadan modülde kendisi, kullanıcılar, izinleri verilebilir.Modül kuracağını kullanıcı modülü tarafından erişilen nesneler üzerinde izinlerine sahip olmanız gerekir.

Kimliğe bürünme düzey, Kimliğe bürünmeyi tanımlandığı modül türü tarafından belirlenir.

Sunucu-CVE-2006-düzey kimliğe bürünme aşağıdaki tanımlanabilir:

  • DDL Tetikleyicileri

Sunucu-CVE-2006-kapsamını düzey kimliğe bürünme "Açık Server-CVE-2006-düzey bağlam geçişi." önceden tanımlamış aynıdır

Veritabanı-CVE-2006-düzey kimliğe bürünme aşağıdaki tanımlanabilir:

  • DML Tetikleyicileri

  • Kuyrukları

  • Saklı yordamlar

  • Kullanıcı tanımlı işlevler

  • Veritabanı-CVE-2006-kapsamını düzey kimliğe bürünme "Açık veritabanı-CVE-2006-düzey bağlam geçişi." önceden tanımlamış aynıdır

  • Örtülü bağlam geçişi hakkında daha fazla bilgi için bkz: yürütmek AS modüllerde kullanma.

Örnek

Aşağıdaki örnekte, Mary tablonun sahibi olur. MyTable. Filiz kullanıcı tablo yuvarlamak için Scott ister, ancak Scott hiçbir doğrudan tabloyu izni.Bu nedenle Filiz saklı yordam oluşturur dbo.usp_TruncateMyTable ve tan yordamına yürütmek izinleri verir. Scott saklı yordam çalıştırıldığında Database Engine izinler, Mary kendisini saklı yordamın yürütme, tablo kesecek şekilde doğrular. Filiz, tablonun sahibi olduğu için Scott, tablo üzerinde doğrudan izin olmasına karşın deyim başarılı olur.

CREATE PROCEDURE dbo.usp_TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;