Meta veri görünürlük yapılandırma
Önceki sürümlerinde SQL Server, bir veritabanındaki tüm nesneler için meta veri üyeleri için görünür Genel rolü. Bu demektir ki örneğine oturum açan herhangi bir kullanıcı SQL Serverher nesne için meta veri sunucusu, bir kullanıcı hakkı bulunduğu bile bu nesneleri görüntüleyebilirsiniz.
De SQL Server 2005ve daha sonra meta veri görünürlük ya da bir kullanıcının sahibi olduğu ya da üzerinde kullanıcıya bazı izni securables sınırlıdır. Örneğin, aşağıdaki sorgu döndürür bir kullanıcı gibi bir izin verilmiş ise satır seçin veya tablo ekleme myTable.
SELECT name, object_id
FROM sys.tables
WHERE name = 'myTable';
GO
Ancak, kullanıcı izni yoksa myTable, sorguyu bir boş sonuç kümesi döndürür.
Kapsam ve meta veri görünürlük yapılandırma etkisi
Meta veri görünürlük yapılandırma, yalnızca aşağıdaki securables geçerlidir.
Katalog görünümleri |
Veritabanı Altyapısı sp_help depolanmış yordamlar |
Yerleşik işlevleri risklere meta verileri |
Bilgi şema görünümlerini |
Uyumluluk görünümleri |
Genişletilmiş özellikler |
Meta veri görünürlük yapılandırma aşağıdaki securables geçerli değildir.
Sistem tabloları günlüğü |
SQL ServerAracısı sistem tabloları |
Veritabanı bakım planı sistem tabloları |
Yedekleme sistem tabloları |
Yineleme sistem tabloları |
Çoğaltma ve SQL Serverajan sp_help depolanmış yordamlar |
Sınırlı meta verileri erişilebilirlik aşağıdaki anlamına gelir:
Varsayımında bulunan uygulamalar Genel meta veri erişim sonu.
Sistem görünümleri sorgulamaları yalnızca satırlar alt kümesini döndürebilir veya bazen boş bir sonuç kümesi.
Meta veri verilirken, yerleşik işlevleri objectpropertyex gibi null döndürebilir.
Veritabanı Altyapısı Sp_help saklı yordamlar yalnızca satırlar alt kümesini geri veya null.
Saklı yordamları ve Tetikleyicileri, gibi sql modülleri arayan güvenlik bağlamı altında çalışan ve bu nedenle meta erişilebilirliği sınırlıdır. Saklı yordam için tablo meta verileri erişmeye çalıştığında, aşağıdaki kodda, myTableüzerine arayan herhangi bir hak olan bir boş sonuç kümesi döndürülür. Önceki sürümlerinde SQL Server, bir satır döndürdü.
CREATE PROCEDURE assumes_caller_can_access_metadata
BEGIN
SELECT name, id
FROM sysobjects
WHERE name = 'myTable';
END;
GO
Arayanların meta verileri görüntülemek izin vermek için arayanlara uygun bir kapsamı adresindeki VIEW DEFINITION izni verebilirsiniz: Nesne düzeyinde, veritabanı düzeyi veya sunucu düzeyinde. Bu nedenle, önceki örnekte arayan görünüm tanımı izni varsa, myTable, saklı yordam, bir satır döndürür. Daha fazla bilgi için grant (Transact-sql)ve Veritabanı IZINLERI (Transact-sql).
Böylece sahibinin kimlik bilgileri altında yürütür saklı yordam ayrıca değiştirebilirsiniz. Yordam sahibi ve tablo sahibi aynı sahip, sahipliği zincir uygular ve yordam sahibinin güvenlik bağlamı için meta veri erişim sağlayan myTable. Bu senaryoda, aşağıdaki kod, arayana meta bir satır döndürür.
[!NOT]
Aşağıdaki örnek sys.objects Katalog görünümü yerine katalogsys.sysobjectsUyumluluk Uyumluluk Görünümü.
CREATE PROCEDURE does_not_assume_caller_can_access_metadata
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT name, id
FROM sys.objects
WHERE name = 'myTable'
END;
GO
[!NOT]
execute as arayan güvenlik bağlamında geçici olarak geçiş yapmak için kullanabilirsiniz. Daha fazla bilgi için, bkz. execute (Transact-sql).
Sahipliği zincir hakkında daha fazla bilgi için bkz: Ownership Chains.
Faydaları ve sınırlamaları meta veri görünürlük yapılandırma
Meta veri görünürlük yapılandırma, genel güvenlik planınızın içindeki önemli bir rol oynayabilir. Ancak, hangi yetenekli ve belirlenen kullanıcı bazı Meta açıklama zorlayabilir durumlar vardır. Biz birçok savunma derinlemesine biri olarak meta veri izinleri dağıtmamanızı öneririz.
Meta verilerde hata iletileri emisyon sorgularda koşul değerlendirme sırasını işleyerek zorlamak teorik olarak mümkündür. Böyle imkanı deneme yanılma saldırılarına özgü değil SQL Server. Bunun içinde ilişkisel cebir izin ilişkilendirilebilir ve yer değiştirebilme dönüşümleri tarafından açık. Döndürülen hata iletileri bilgileri kısıtlayarak, bu riski azaltabilirsiniz. Daha bu şekilde meta veri görünürlük sınırlamak için izleme bayrağı 3625 ile sunucuyu başlatabilirsiniz. Bu izleme bayrağı hata iletileri gösterilen bilgi miktarını sınırlandırır. Buna karşılık, bu zorla açıklamaları önlemeye yardımcı olur. Hata iletileri ve hata ayıklama amacıyla kullanmak zor olabilir kısa ve öz olacak tradeoff olduğunu. Daha fazla bilgi için Veritabanı altyapısı hizmeti başlatma seçeneklerive İzleme Bayrakları (Transact-SQL).
Aşağıdaki meta verileri Zorlanmış açığa tabi değildir:
Depolanan değeri provider_string sütununda sys.servers. alter any bağlantılı sunucu izni olmayan bir kullanıcı, bu sütunda null değeri görürsünüz.
Kaynak tanımı kullanıcı tanımlı bir nesne bir saklı yordam veya tetikleyiciyi gibi. Kaynak kodu görünür olduğunda yalnızca aşağıdakilerden biri doğrudur:
Kullanıcının nesneye görünüm tanımı izni vardır.
Kullanıcı nesnesi üzerinde görünüm tanımı izni engellendi değil ve nesne üzerinde denetim, değiştirme ya da alın SAHIPLIK izni vardır. Diğer tüm kullanıcıların boş göreceksiniz.
Aşağıdaki katalog görünümler içinde bulunan tanım sütunlar:
sys.all_sql_modules
sys.sql_modules
sys.server_sql_modules
sys.check_constraintsTanım
sys.default_constraints
sys.computed_columns
sys. numbered_procedures
Ctext sütununda syscomments Uyumluluk Görünümü.
Çıkış sp_helptext yordam.
Bilgi şema görünümlerini aşağıdaki sütunlar:
INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE
INFORMATION_SCHEMA.SÜTUNLAR.COLUMN_DEFAULT
INFORMATION_SCHEMA.ETKİ ALANLARI.DOMAIN_DEFAULT
INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT
INFORMATION_SCHEMA.RUTİN.ROUTINE_DEFINITION
INFORMATION_SCHEMA.Görünümler.VIEW_DEFINITION
OBJECT_DEFINITION() işlevi
Clear_text_passwordpassword_hash sütunda depolanan değeri sys.sql_logins. control server izni olmayan bir kullanıcı, bu sütunda null değeri görürsünüz.
[!NOT]
Yerleşik sistem yordamları ve işlevleri sql tanımları ile genel olarak görünür sys.system_sql_modules Katalog görünümü, sp_helptext depolanmış yordam ve OBJECT_DEFINITION() işlevi.
Meta veri görünürlük genel prensipleri
Meta veri görünürlük ile ilgili dikkate alınacak bazı genel ilkeleri şunlardır:
Sabit rolleri örtülü izinleri
İzinleri kapsamında
deny önceliği
Alt bileşen meta veri görünürlük
Sabit rolleri ve örtülü izinleri
Sabit roller tarafından erişilebilecek meta veriler ilgili örtülü izinlerinin bağlıdır.
İzinleri kapsamında
Bir kapsamı adresindeki izinleri, bu kapsam ve tüm meta verileri görebilme olanağı kapsam içine ima. Örneğin, bir şema üzerinde select izni grantee, bu şema tarafından bulunan tüm securables üzerinde select izni olduğunu ima ediyor. Bir şema üzerinde select izni verme Bu nedenle şema ve ayrıca tüm tabloları, görünüm, işlevleri, yordamları, sıraları, eş, türleri ve xml şema koleksiyonları içindeki meta verileri görmek kullanıcı sağlar. Kapsamları hakkında daha fazla bilgi için bkz: İzinleri hiyerarşi (veritabanı altyapısı).
deny önceliği
deny genellikle diğer izinleri önceliklidir. Örneğin, kullanıcı bir şema üzerinde execute izni verildiğini, ancak bu şema saklı yordam üzerinde execute izni engellendi kullanıcı bu saklı yordam meta görüntüleyemez.
Ayrıca, bir kullanıcı bir şema üzerinde execute izni engellendi, ancak bu şema saklı yordam üzerinde execute izni verilmiş olan kullanıcı bu saklı yordam meta görüntüleyemez.
Başka bir örnek, kullanıcı izni ve senin çeşitli rol üyelikleri ile mümkündür, bir saklı yordam üzerinde execute izni engellendi ENGELLE önceliklidir ve kullanıcı saklı yordam meta görüntüleyemez.
Alt bileşen meta veri görünürlük
Dizinler gibi alt bileşenler görünürlüğünü kontrol kısıtlamaları ve Tetikleyiciler üst izinler tarafından belirlenir. Bu alt bileşenleri c.Grantable izinleri yoktur. Örneğin, bir kullanıcı tabloda bazı izni verilmişse, kullanıcı tablolar, sütunlar, dizinler, check kısıtlamaları, Tetikleyiciler ve gibi diğer bileşenleri için meta verileri görüntüleyebilirsiniz.
Tüm veritabanı kullanıcıları için erişilebilir meta veriler
Bazı meta verileri belirli bir veritabanında tüm kullanıcıları için erişilebilir olmalıdır. Örneğin, dosya gruplarını conferrable izinleri yoktur; Bu nedenle, kullanıcı bir filegroup meta veri görüntüleme izni verilemez. Ancak, tablo oluşturduğunuz herhangi bir kullanıcı on kullanmak için filegroup meta verilere erişmek gerekir filegroupya da TEXTIMAGE_ON filegroupTABLEdeyimi yan tümceleri.
DB_ID() ve db_name() işlevleri tarafından döndürülen meta tüm kullanıcılar tarafından görülebilir.
Görülebilir katalog görünümleri aşağıdaki tabloda Genel rolü.
sys.partition_functions |
sys.partition_range_values |
sys.partition_schemes |
sys.data_spaces |
filegroup_namesys.filegroups |
sys.data_spacessys.destination_data_spaces |
sys.database_files |
allocation_units |
sys.Partitions |
sys.messages |
sys.schemas |
sys.Configurations |
sys.sql_dependencies |
sys.type_assembly_usages |
sys.parameter_type_usages |
sys.column_type_usages |
Ayrıca bkz.
Başvuru
execute as yan tümcesi (Transact-sql)
Kataloğu görünümleri (Transact-sql)
Uyumluluk görünümleri (Transact-sql)