Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Meta verilerin görünürlüğü, kullanıcının sahip olduğu veya kullanıcıya bazı izinlerin verildiği güvenli hale getirilebilir öğelerle sınırlıdır.
Örneğin, kullanıcı veya SELECT tablosunda INSERTgibi myTable bir izin verirse aşağıdaki sorgu bir satır döndürür.
SELECT name, object_id
FROM sys.tables
WHERE name = N'myTable';
GO
Ancak, kullanıcının üzerinde myTableizni yoksa sorgu boş bir sonuç kümesi döndürür.
Meta veri görünürlüğü yapılandırmasının kapsamı ve etkisi
Meta veri görünürlüğü yapılandırması yalnızca aşağıdaki güvenli hale getirilebilir öğeler için geçerlidir:
- Katalog görünümleri
- Yerleşik işlevleri açığa çıkaran meta veriler
- Uyumluluk görünümleri
- Veritabanı Altyapısı
sp_helpsaklı yordamları - Bilgi şeması görünümleri
- Genişletilmiş özellikler
Meta veri görünürlüğü yapılandırması aşağıdaki güvenli hale getirilebilir öğeler için geçerli değildir:
- Kütük Aktarma Sistemi Tabloları
- Veritabanı bakım planı sistem tabloları
- Çoğaltma sistemi tabloları
- SQL Server Agent sistem tabloları
- Yedekleme sistemi tabloları
- Çoğaltma ve SQL Server Aracısı
sp_helpsaklı yordamları
Sınırlı meta veri erişilebilirliği şu anlama gelir:
- Sistem görünümlerinde sorgular yalnızca bir satır alt kümesi veya bazen boş bir sonuç kümesi döndürebilir.
- OBJECTPROPERTYEX gibi meta veri yayan yerleşik işlevler döndürebilir
NULL. - Veritabanı Altyapısı
sp_helpsaklı yordamları yalnızca bir satır alt kümesi döndürebilir veyaNULL. - Sonuç olarak, genel meta veri erişimine izin veren uygulamalar kesintiye neden olur.
Saklı yordamlar ve tetikleyiciler gibi SQL modülleri çağıranın güvenlik bağlamı altında çalışır ve bu nedenle meta veri erişilebilirliği sınırlıdır. Örneğin, aşağıdaki kodda, çağıranın üzerinde hakları olmayan myTable tablosunun meta verilerine erişmeye çalışan saklı yordam, boş bir sonuç kümesi döndürür. SQL Server'ın önceki sürümlerinde bir satır döndürülür.
CREATE PROCEDURE assumes_caller_can_access_metadata
BEGIN
SELECT name, object_id
FROM sys.objects
WHERE name = N'myTable';
END;
GO
Çağıranların meta verileri görüntülemesine izin vermek için, çağıranlara VIEW DEFINITION izin verebilir veya SQL Server 2022 (16.x) ve sonraki sürümlerde VIEW SECURITY DEFINITION uygun bir kapsamda: VIEW PERFORMANCE DEFINITION nesne düzeyi, veritabanı düzeyi veya sunucu düzeyi. Bu nedenle, önceki örnekte çağıranın VIEW DEFINITION üzerinde myTableizni varsa saklı yordam bir satır döndürür. Daha fazla bilgi için bkz. GRANT ve GRANT Database Permissions.
Saklı yordamı, sahibin kimlik bilgileri altında yürütülmesi için de değiştirebilirsiniz. Yordam sahibi ve tablo sahibi aynı kişi olduğunda, sahiplik zinciri uygulanır ve bu durumda yordam sahibinin güvenlik bağlamı myTable'nin meta verilerine erişim sağlar. Bu senaryo altında, aşağıdaki kod çağırana bir meta veri satırı döndürür.
Not
Aşağıdaki örnek, sys.objects katalog görünümünü, sys.sysobjects uyumluluk görünümü yerine kullanır.
CREATE PROCEDURE does_not_assume_caller_can_access_metadata
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT name, object_id
FROM sys.objects
WHERE name = N'myTable';
END
GO
Not
Öğesini kullanarak EXECUTE AS , arayanın güvenlik bağlamını geçici olarak değiştirebilirsiniz. Daha fazla bilgi için bkz. AS YÜRÜTME.
Meta veri görünürlüğü yapılandırmasının avantajları ve sınırları
Meta veri görünürlüğü yapılandırması, genel güvenlik planınızda önemli bir rol oynayabilir. Ancak, yetenekli ve kararlı bir kullanıcının bazı meta verilerin açıklanmasını zorlayabildiği durumlar vardır. Meta veri izinlerini birçok derinlemesine savunmadan biri olarak dağıtmanızı öneririz.
Sorgularda koşul değerlendirmesi sırasını değiştirerek hata iletilerinde meta verilerin emisyonunu zorlamak teorik olarak mümkündür. Bu tür deneme ve hata saldırılarının olasılığı SQL Server'a özgü değildir. İlişkisel cebirde izin verilen ilişkilendirici ve commutatif dönüşümler tarafından ima edilir. Hata iletilerinde döndürülen bilgileri sınırlayarak bu riski azaltabilirsiniz. Meta verilerin görünürlüğünü bu şekilde daha fazla kısıtlamak için sunucuyu izleme bayrağı 3625 ile başlatabilirsiniz. Bu izleme bayrağı, hata iletilerinde gösterilen bilgi miktarını sınırlar. Buna karşılık, bu zorlamalı açıklamaları önlemeye yardımcı olur. Hata iletilerinin ters olması ve hata ayıklama amacıyla kullanılması zor olabilir. Daha fazla bilgi için bkz . Veritabanı Altyapısı Hizmeti başlatma seçenekleri ve izleme bayrakları.
Aşağıdaki meta veriler zorla açıklamaya tabi değildir:
provider_string'insys.serverssütununda saklanan değer. İzni olmayanALTER ANY LINKED SERVERbir kullanıcı bu sütunda birNULLdeğer görür.Saklı yordam veya tetikleyici gibi kullanıcı tanımlı bir nesnenin kaynak tanımı. Kaynak kodu yalnızca aşağıdaki koşullardan biri doğru olduğunda görünür:
Kullanıcının nesne üzerinde izni var
VIEW DEFINITION.Kullanıcının nesne üzerinde izni reddedilmemiş
VIEW DEFINITIONve nesne üzerinde ,CONTROLveyaALTERizni varTAKE OWNERSHIP. Diğer tüm kullanıcılar görürNULL.
Aşağıdaki katalog görünümlerinde bulunan tanım sütunları:
sys.all_sql_modulessys.server_sql_modulessys.default_constraintssys.numbered_proceduressys.sql_modulessys.check_constraintssys.computed_columns
ctextuyumluluk görünümündekisyscommentssütunu.sp_helptextprosedürünün çıktısı.Bilgi şeması görünümlerinde aşağıdaki sütunlar:
INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSEINFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULTINFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITIONINFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
OBJECT_DEFINITION()fonksiyonpassword_hash'insys.sql_loginssütununda saklanan değer. sql server 2022 (16.x) ve sonraki sürümlerinde veya olmayanCONTROL SERVERbir kullanıcı,VIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITIONizin bu sütunda birNULLdeğer görür.
Yerleşik sistem yordamlarının ve işlevlerinin SQL tanımları katalog görünümü, sys.system_sql_modules saklı yordam ve sp_helptext işlev aracılığıyla OBJECT_DEFINITION() genel olarak görülebilir.
Not
Sistem saklı yordamı sp_helptext Azure Synapse Analytics'te desteklenmez. Bunun yerine sys.sql_modules nesne kataloğu görünümünü kullanın.
Meta veri görünürlüğünün genel ilkeleri
Meta veri görünürlüğüyle ilgili dikkate alınması gereken bazı genel ilkeler aşağıdadır:
- Sabit rollerin zımni izinleri
- İzinlerin kapsamı
- Önceliği:
DENY - Alt bileşen meta verilerinin görünürlüğü
Sabit roller ve örtük izinler
Sabit roller tarafından erişilebilen meta veriler, karşılık gelen örtük izinlerine bağlıdır.
İzinlerin kapsamı
Bir kapsamdaki izinler, bu kapsamda ve tüm kapalı kapsamlarda meta verileri görebilmeyi ifade eder. Örneğin, bir şema üzerindeki izin, SELECT izni verenin SELECT bu şemanın içerdiği tüm güvenli hale getirilebilir öğeler üzerinde izni olduğunu gösterir. Bu nedenle bir şema üzerinde izin verilmesi SELECT , kullanıcının şemanın meta verilerini ve içindeki tüm tabloları, görünümleri, işlevleri, yordamları, kuyrukları, eş anlamlıları, türleri ve XML şema koleksiyonlarını görmesini sağlar. Kapsamlar hakkında daha fazla bilgi için bkz. İzinler Hiyerarşisi (Veritabanı Altyapısı).
Not
İzin UNMASK meta veri görünürlüğünü etkilemez: tek başına vermek UNMASK meta verileri açıklamaz.
UNMASK her zaman herhangi bir etkiye sahip olmak için bir SELECT izin eşlik etmesi gerekir. Örnek: Veritabanı kapsamında verme UNMASK ve tek bir tabloda verme işlemi SELECT , kullanıcının yalnızca seçebileceği tek tek tablonun meta verilerini görebileceği sonucuna sahiptir.
Reddet Önceliği
DENY genellikle diğer izinlerden önceliklidir. Örneğin, bir veritabanı kullanıcısının EXECUTE şema üzerinde izni varsa ancak bu şemadaki bir saklı yordam üzerinde izni reddedildiyse EXECUTE , kullanıcı söz konusu saklı yordamın meta verilerini görüntüleyemez.
Ayrıca, bir kullanıcıya şema üzerinde izin verilmeyen EXECUTE ancak bu şemadaki saklı yordam üzerinde izin verilmişse EXECUTE , kullanıcı söz konusu saklı yordamın meta verilerini görüntüleyemez.
Başka bir örnek için, kullanıcıya çeşitli rol üyelikleriniz EXECUTE aracılığıyla mümkün olan saklı yordam üzerinde izin verildiyse ve izin reddedildiyse DENY öncelik kazanır ve kullanıcı saklı yordamın meta verilerini görüntüleyemez.
Alt bileşen meta verilerinin görünürlüğü
Dizinler, denetim kısıtlamaları ve tetikleyiciler gibi alt bileşenlerinin görünürlüğü üst öğedeki izinlerle belirlenir. Bu alt bileşenlere izin verilmektedir. Örneğin, bir kullanıcıya tablo üzerinde bazı izinler verilmişse, kullanıcı tablolar, sütunlar, dizinler, denetim kısıtlamaları, tetikleyiciler ve diğer alt bileşenler için meta verileri görüntüleyebilir. Başka bir örnek, belirli bir tablonun yalnızca tek bir sütununu vermektir SELECT : Bu, izni verenin tüm sütunlar dahil olmak üzere tüm tablonun meta verilerini görüntülemesine olanak tanır. Bunu düşünmenin bir yolu, iznin VIEW DEFINITION yalnızca varlık düzeyinde (bu örnekteki tablo) çalışması ve Alt Girdi listelerinde (sütun veya güvenlik ifadeleri gibi) kullanılamamasıdır.
Aşağıdaki kod bu davranışı gösterir:
CREATE TABLE t1
(
c1 INT,
c2 VARCHAR
);
GO
CREATE USER testUser WITHOUT LOGIN;
GO
EXECUTE AS USER = 'testUser';
SELECT OBJECT_SCHEMA_NAME(object_id),
OBJECT_NAME(object_id),
name
FROM sys.columns;
SELECT * FROM sys.tables;
-- this returns no data, as the user has no permissions
REVERT;
GO
-- granting SELECT on only 1 column of the table:
GRANT SELECT ON t1 (c1) TO testUser;
GO
EXECUTE AS USER = 'testUser';
SELECT OBJECT_SCHEMA_NAME(object_id),
OBJECT_NAME(object_id),
name
FROM sys.columns;
SELECT * FROM sys.tables;
-- this returns metadata for all columns of the table and the table itself
;
REVERT;
GO
DROP TABLE t1;
DROP USER testUser;
Tüm veritabanı kullanıcıları tarafından erişilebilen meta veriler
Bazı meta verilerin belirli bir veritabanındaki tüm kullanıcılar tarafından erişilebilir olması gerekir. Örneğin, dosya gruplarının konfederasyon izinleri yoktur; bu nedenle, bir kullanıcıya dosya grubunun meta verilerini görüntüleme izni verilemiyor. Ancak, tablo oluşturabilen tüm kullanıcıların deyiminin ON <filegroup> veya TEXTIMAGE_ON <filegroup> yan tümcelerini kullanabilmesi için dosya grubu meta verilerine erişebilmesi CREATE TABLE gerekir.
ve DB_ID() işlevleri tarafından DB_NAME() döndürülen meta veriler tüm kullanıcılar tarafından görülebilir.
Bu, genel rolüne açık olan katalog görünümlerinin listesidir.
sys.allocation_unitssys.column_type_usagessys.configurationssys.data_spacessys.database_filessys.destination_data_spacessys.filegroupssys.messagessys.parameter_type_usagessys.partition_functionssys.partition_range_valuessys.partition_schemessys.partitionssys.schemassys.sql_dependenciessys.type_assembly_usages