SQL Server'daki hizmetlere izin vermek için Hizmet SID'lerini kullanma

SQL Server, doğrudan belirli bir hizmete izin vermek için service güvenlik sorumluları olarak da adlandırılan hizmet başına Güvenlik Tanımlayıcıları (SID) kullanır. SQL Server altyapı ve aracı hizmetlerine (sırasıyla NT SERVICE\MSSQL$<InstanceName ve NT >\SQLAGENT$SERVICEInstanceName<>) izin vermek için bu yöntemi kullanır. Bu yöntemi kullanarak, bu hizmetler yalnızca çalışırken veritabanı motoruna erişebilir. Daha fazla bilgi için bkz. KB2620201 (arşiv bağlantısı).

Bu yöntemi, diğer hizmetlere izinler verirken de kullanabilirsiniz. Hizmet SID'sini kullanmak, hizmet hesaplarını yönetme ve bakım yükünü ortadan kaldırır ve sistem kaynaklarına verilen izinler üzerinde daha sıkı ve daha ayrıntılı denetim sağlar.

Hizmet SID'sinin kullanılabildiği hizmetlere örnek olarak şunlar verilebilir:

  • System Center Operations Manager Sistem Durumu Hizmeti (NT SERVICE\HealthService)
  • Windows Server Yük Devretme Kümelemesi (WSFC) hizmeti (NT SERVICE\ClusSvc)

Bazı hizmetlerin varsayılan olarak bir Hizmet SID'si yoktur. hizmet SID'sini SC.exekullanarak oluşturmanız gerekir. Bu yöntem, Microsoft System Center Operations Manager yöneticileri tarafından SQL Server üzerinde HealthService'e izin vermek için kullanılmıştır.

Hizmet SID'sini oluşturup onayladıktan sonra, SQL Server içinde buna izin vermelisiniz. SQL Server Management Studio (SSMS) veya Transact-SQL sorgu kullanarak Windows oturum açma bilgileri oluşturarak izinler verin. Oturum açma bilgilerini oluşturduktan sonra izin verebilir, rollere ekleyebilir ve diğer tüm oturum açma işlemleri gibi veritabanlarıyla eşleyebilirsiniz.

Tip

Login failed for user 'NT AUTHORITY\SYSTEM' hatasını alırsanız, istenen hizmet için Hizmet SID'sinin mevcut olduğunu doğrulayın, hizmet SID oturum açma bilgilerinin SQL Server oluşturulduğunu doğrulayın ve SQL Server'de Hizmet SID'sine uygun izinlerin verildiğini doğrulayın.

Security

Hizmet hesaplarını ortadan kaldırma

Geleneksel olarak, hizmetlerin SQL Server oturum açmasına izin vermek için hizmet hesapları kullanılırdı. Hizmet hesapları, hizmet hesabı parolasını korumak ve düzenli aralıklarla güncelleştirmek zorunda olduğundan ek bir yönetim karmaşıklığı katmanı ekler. Ayrıca, etkinliklerini maskeleme girişiminde bulunan bir kişi, örnekte eylem gerçekleştirirken hizmet hesabı kimlik bilgilerini kullanabilir.

Sistem hesaplarına yönelik ayrıntılı izinler

Sistem hesaplarına, LocalSystem (en-us'de NT AUTHORITY\SYSTEM ) veya NetworkService (en-us'de NT AUTHORITY\NETWORK SERVICE) hesapları için oturum açma bilgileri oluşturup bu oturum açma izinleri vererek geçmişe dönük izinler verilmiştir. Bu yöntem, SQL'de sistem hesabı olarak çalışan tüm işlem veya hizmet izinlerini verir.

Hizmet SID'sini kullanarak belirli bir hizmete izin vekleyebilirsiniz. Hizmet, yalnızca çalışırken izin vermiş olduğunuz kaynaklara erişebilir. Örneğin, HealthServiceLocalSystem olarak çalıştırılırsa ve siz buna View Server State izin verirseniz, LocalSystem hesabının sadece View Server State bağlamında çalıştırılırken HealthService izni olur. SQL’in sunucu durumuna LocalSystem biçiminde başka bir işlem erişim girişiminde bulunursa, erişim reddedilir.

Örnekler

A. Hizmet SID'i oluşturma

Aşağıdaki PowerShell komutu, System Center Operations Manager sistem durumu hizmetinde bir hizmet SID'i oluşturur.

sc.exe --% sidtype "HealthService" unrestricted

Önemli

--% PowerShell'e komutun geri kalanını ayrıştırmayı durdurmasını söyler. Bu, eski komutları ve uygulamaları kullanırken kullanışlıdır.

B. Hizmet SID'lerini sorgulama

Hizmet SID'sini denetlemek veya hizmet SID'sinin mevcut olduğundan emin olmak için PowerShell'de aşağıdaki komutu yürütür.

sc.exe --% qsidtype "HealthService"

Önemli

--% PowerShell'e komutun geri kalanını ayrıştırmayı durdurmasını söyler. Bu, eski komutları ve uygulamaları kullanırken kullanışlıdır.

C. Yeni oluşturulan Hizmet SID'sini Oturum Açma Olarak Ekleme

Aşağıdaki örnek, T-SQL kullanarak System Center Operations Manager sağlık hizmeti için bir oturum açma işlemi oluşturur.

CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO

D. Mevcut Bir Hizmet SID'sini Oturum Açma Olarak Ekleme

Aşağıdaki örnek, T-SQL kullanarak Küme Hizmeti için bir oturum açma bilgisi oluşturur. Küme hizmetine izin verilmesi, SYSTEM hesabına aşırı izin verme gereksinimini doğrudan ortadan kaldırır.

CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO

E. Bir Hizmet SID'sine izin ver.

Küme Hizmeti'ne Kullanılabilirlik Gruplarını yönetmek için gereken izinleri verin.

GRANT ALTER ANY AVAILABILITY GROUP TO [NT SERVICE\ClusSvc]
GO

GRANT CONNECT SQL TO [NT SERVICE\ClusSvc]
GO

GRANT VIEW SERVER STATE TO [NT SERVICE\ClusSvc]
GO

Uyarı

Hizmet SID oturum açma işlemlerinin kaldırılması veya sysadmin sunucu rolünden kaldırılması, SQL Server Database Engine bağlanan çeşitli SQL Server bileşenlerinde sorunlara neden olabilir. Bazı sorunlar şunlardır:

  • SQL Server Agent başlatılamıyor veya SQL Server hizmetine bağlanılamıyor
  • SQL Server Kurulum programları aşağıdaki Microsoft Bilgi Bankası makalesinde belirtilen sorunla karşılaşır: https://mskb.pkisolutions.com/kb/955813

Varsayılan bir SQL Server örneği için, aşağıdaki Transact-SQL komutlarını kullanarak hizmet SID'sini ekleyerek bu durumu düzeltebilirsiniz:

CREATE LOGIN [NT SERVICE\MSSQLSERVER] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQLSERVER]

CREATE LOGIN [NT SERVICE\SQLSERVERAGENT] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLSERVERAGENT]

adlandırılmış bir SQL Server örneği için aşağıdaki Transact-SQL komutlarını kullanın:

CREATE LOGIN [NT SERVICE\MSSQL$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQL$SQL2019]

CREATE LOGIN [NT SERVICE\SQLAgent$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLAgent$SQL2019]

Bu örnekte SQL2019 SQL Server örnek adıdır.