Aracılığıyla paylaş


TRUSTWORTHY veritabanı özelliği

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

TRUSTWORTHY veritabanı özelliği, SQL Server örneğinin veritabanına ve içindeki içeriğe güvenip güvenmediğini göstermek için kullanılır. Varsayılan olarak, bu ayar KAPALI'dır, ancak deyimi kullanılarak ALTER DATABASE AÇI olarak ayarlanabilir. Örneğin: ALTER DATABASE AdventureWorks2022 SET TRUSTWORTHY ON;.

Uyarı

Bu seçeneği ayarlamak için izninizin olması veya CONTROL SERVER sabit sunucu rolünün üyesi olmanız gerekir.

Aşağıdaki nesnelerden birini içeren bir veritabanı eklemenin bir sonucu olarak var olabilecek bazı tehditleri azaltmak için veritabanı özelliğini KAPALI olarak bırakmanızı TRUSTWORTHY öneririz:

Her iki durum da belirli bir ayrıcalık derecesi gerektirir ve SQL Server örneğine zaten eklenmiş bir veritabanı bağlamında kullanıldığında uygun mekanizmalarla korunur. Ancak, veritabanı çevrimdışına alınırsa, veritabanı dosyasına erişiminiz varsa, bunu tercih ettiğiniz bir SQL Server örneğine ekleyebilir ve veritabanına kötü amaçlı içerik ekleyebilirsiniz. VERITABANLARı SQL Server'da ayrılıp eklendiğinde, verilerde ve günlük dosyalarında veritabanı dosyalarına erişimi kısıtlayan belirli izinler ayarlanır.

SQL Server örneğine bağlı bir veritabanına hemen güvenilemediğinden, veritabanı açıkça güvenilir olarak işaretlenene kadar veritabanının kapsamı dışındaki kaynaklara erişmesine izin verilmez. Bu nedenle, ON seçeneğine sahip TRUSTWORTHY bir veritabanını yedekler veya ayırırsanız ve veritabanını aynı veya başka bir SQL Server örneğine ekler veya geri yüklerseniz, TRUSTWORTHY ekleme veya geri yükleme tamamlandığında özellik KAPALI olarak ayarlanır. Ayrıca, veritabanı dışındaki kaynaklara erişmek için tasarlanmış modüllerin ve EXTERNAL_ACCESS ve GÜVENSİz izin ayarına sahip derlemelerin başarıyla çalışması için ek gereksinimler vardır.

Uyarı

Varsayılan olarak, TRUSTWORTHY ayarı msdb veritabanı için ON olarak ayarlanmıştır. Bu ayarı varsayılan değerinden değiştirirseniz, veritabanını kullanan SQL Server bileşenleri tarafından beklenmeyen davranışlara msdb neden olabilir.

TRUSTWORTHY Ayar ON olarak ayarlandıysa ve veritabanının sahibi sysadmin grubu gibi yönetici kimlik bilgilerine sahip bir grubun üyesiyse, veritabanı sahibi daha sonra SQL Server örneğini tehlikeye atabilecek güvenli olmayan derlemeler oluşturabilir ve çalıştırabilir.

Daha Fazla Bilgi

İnternet Hizmet Sağlayıcısı (ISS) ortamında (örneğin, bir web barındırma hizmetinde), her müşterinin kendi veritabanını yönetmesine izin verilir ve sistem veritabanlarına ve diğer kullanıcı veritabanlarına erişimi kısıtlanır. Örneğin, iki rakip şirketin veritabanları aynı ISS tarafından barındırılabilir ve aynı SQL Server örneğinde bulunabilir. Veritabanı orijinal örneğine eklendiğinde, kullanıcı veritabanına tehlikeli kod eklenebilir ve veritabanı dağıtıldığında kod İSS örneğinde etkinleştirilir. Bu durum, veritabanları arası erişimin denetlenmesini önemli hale getirir.

Her veritabanına aynı genel varlık sahipse ve bunları yönetiyorsa, veritabanları arası Hizmet Aracısı iletişimi gibi uygulamaya özgü bir özellik gerekmediği sürece veritabanıyla güven ilişkisi kurmak yine de iyi bir uygulama değildir. Veritabanları arasında güven ilişkisi, veritabanları arası sahiplik zincirinin etkinleştirilmesi veya TRUSTWORTHY özelliğinin kullanılmasıyla bir veritabanının örnek tarafından güvenilir olarak işaretlenmesi yoluyla oluşturulabilir. is_trustworthy_on Katalog görünümünün sütunu, veritabanının sys.databases özellik kümesine sahip TRUSTWORTHY olup olmadığını gösterir.

Veritabanı sahipliği ve güveni için en iyi yöntemler şunlardır:

  • Veritabanları için ayrı sahiplere sahip olun. Tüm veritabanları sistem yöneticisine ait olmamalıdır.
  • Her veritabanı için sahip sayısını sınırlayın.
  • Güveni seçici bir şekilde verin.
  • Tek bir ünitede birden çok veritabanı dağıtılmadığı sürece , çapraz veritabanı sahipliği zincirleme ayarını KAPALI olarak bırakın.
  • Kullanımı TRUSTWORTHY özelliğini kullanmak yerine seçmeli güvene taşıyın.

Aşağıdaki kod örneği, özelliği ON olarak ayarlanmış ve veritabanı sahibi TRUSTWORTHY sunucu rolüne ait olan veritabanlarının listesini almak için kullanılabilir.

SELECT SUSER_SNAME(owner_sid) AS DBOWNER,
    d.name AS DATABASENAME
FROM sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id
INNER JOIN sys.databases d ON suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1
    AND d.name NOT IN ('msdb')
    AND r.type = 'R'
    AND r.name = N'sysadmin';
GO

Veritabanının özelliğini belirlemek TRUSTWORTHY için aşağıdaki sorguyu msdb çalıştırabilirsiniz:

SELECT name,
    trustworthy_setting = CASE is_trustworthy_on
        WHEN 1 THEN 'Trustworthy setting is ON for msdb'
        ELSE 'Trustworthy setting is OFF for msdb'
        END
FROM sys.databases
WHERE database_id = 4;
GO

Bu sorgu özelliğin TRUSTWORTHY KAPALI olarak ayarlandığını gösteriyorsa, özelliğini ON olarak ayarlamak için aşağıdaki sorguyu TRUSTWORTHY çalıştırabilirsiniz.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO

Uyarı

TRUSTWORTHY açık konuma getirildiğinde db_owner rolündeki bir kullanıcıyı sysadmin yapmak için yollar vardır. özelliğini kullanırken TRUSTWORTHY dikkatli olun. Aşağıdaki SQL kodu, rolü verilen db_owner bir veritabanındaki veritabanı kullanıcılarının listesini almak için kullanılabilir.

SELECT    roles.principal_id    AS RolePrincipalID
   ,    roles.name       AS RolePrincipalName
   ,    database_role_members.member_principal_id  AS MemberPrincipalID
   ,    members.name      AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members  
JOIN sys.database_principals AS roles  
   ON database_role_members.role_principal_id = roles.principal_id  
JOIN sys.database_principals AS members  
   ON database_role_members.member_principal_id = members.principal_id where  roles.name='db_owner' and members.name <>'dbo'
GO

Sonraki Adımlar