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

grant (Transact-sql)

DENY (Transact-sql)

revoke (Transact-sql)

execute as yan tümcesi (Transact-sql)

Kataloğu görünümleri (Transact-sql)

Uyumluluk görünümleri (Transact-sql)

Diğer Kaynaklar

Permissions of Fixed Database Roles

VIEW ANY DATABASE permission

VIEW DEFINITION Permission