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 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:
EXTERNAL_ACCESS veya UNSAFE izin ayarına sahip kötü amaçlı derlemeler. Daha fazla bilgi için bkz. CLR Tümleştirme Güvenliği.
Yüksek ayrıcalıklı kullanıcılar olarak yürütülecek şekilde tanımlanan kötü amaçlı modüller. Daha fazla bilgi için bkz: EXECUTE AS Yan Tümcesi (Transact-SQL).
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
- SQL Server Veritabanı Altyapısı ve Azure SQL Veritabanı için Güvenlik Merkezi
- VERİ TABANINI DEĞİŞTİR (Transact-SQL)
- EXECUTE AS Kullanarak Veritabanı Kimliğe Bürünme Özelliğini Genişletme