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.
Applies to:SQL Server
Saklı yordamlar veya tetikleyiciler gibi yönetilen veritabanı nesneleri derlenir ve ardından derleme adı verilen birimler halinde dağıtılır. Derlemenin sağladığı işlevselliğin kullanılabilmesi için yönetilen DLL derlemelerinin SQL Server'a kaydedilmesi gerekir. Bir derlemeyi SQL Server veritabanına kaydetmek için CREATE ASSEMBLY deyimini kullanın. Bu makalede, CREATE ASSEMBLY deyimini kullanarak bir derlemenin veritabanına nasıl kaydedileceğini ve derlemenin güvenlik ayarlarının nasıl belirtileceğini açıklar.
Kod erişim güvenliği artık desteklenmiyor
CLR, artık güvenlik sınırı olarak desteklenmeyen .NET Framework'te Kod Erişim Güvenliği'ni (CAS) kullanır.
PERMISSION_SET = SAFE ile oluşturulan bir CLR derlemesi dış sistem kaynaklarına erişebilir, yönetilmeyen kodu çağırabilir ve sysadmin ayrıcalıkları alabilir. SQL Server 2017 (14.x) ve sonraki sürümlerinde, sp_configure seçeneği, clr katı güvenlik, CLR derlemelerinin güvenliğini artırır.
clr strict security varsayılan olarak etkinleştirilir ve SAFE ve EXTERNAL_ACCESS derlemeleri UNSAFEolarak işaretlenmiş gibi değerlendirir. geriye dönük uyumluluk için clr strict security seçeneği devre dışı bırakılabilir, ancak önerilmez.
Tüm derlemeleri, UNSAFE ASSEMBLY veritabanında master izni verilmiş ilgili oturum ile bir sertifika veya asimetrik anahtarla imzalamanızı öneririz. SQL Server yöneticileri, Veritabanı Motoru'nun güvenmesi gereken bir derleme listesine de derleme ekleyebilir. For more information, see sys.sp_add_trusted_assembly.
CREATE ASSEMBLY deyimi
CREATE ASSEMBLY deyimi, veritabanında derleme oluşturmak için kullanılır. İşte bir örnek:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
FROM yan tümcesi oluşturulacak derlemenin yol adını belirtir. Bu yol, Evrensel Adlandırma Kuralı (UNC) yolu veya makinede yerel olan bir fiziksel dosya yolu olabilir.
SQL Server aynı ada, kültüre ve ortak anahtara sahip bir derlemenin farklı sürümlerinin kaydedilmesine izin vermez.
Diğer derlemelere başvuran derlemeler oluşturmak mümkündür. SQL Server'da bir derleme oluşturulduğunda, başvuruda bulunılan derlemeler veritabanında oluşturulmamışsa, SQL Server kök düzeyi derleme tarafından başvuruda bulunılan derlemeleri de oluşturur.
Veritabanı kullanıcılarına veya kullanıcı rollerine bir veritabanında derlemeler oluşturma ve bu nedenle kendi izinleri verilir. Derlemeler oluşturmak için veritabanı kullanıcısının veya rolünün CREATE ASSEMBLY izni olmalıdır.
Derlemenin diğer derlemelere başvurması ancak aşağıdaki durumlarda başarılı olabilir:
- Çağrılan veya başvurulan derleme, aynı kullanıcı veya role aittir.
- Çağrılan veya başvurulan derleme aynı veritabanında oluşturulmuştur.
Derleme oluştururken güvenliği belirtin
SQL Server veritabanında derleme oluştururken, kodunuzun çalıştırabileceği üç farklı güvenlik düzeyinden birini belirtebilirsiniz: SAFE, EXTERNAL_ACCESSveya UNSAFE.
CREATE ASSEMBLY deyimi çalıştırıldığında, kod derlemesinde belirli denetimler gerçekleştirilir ve bu da derlemenin sunucuya kaydedilememesine neden olabilir.
SAFE varsayılan izin kümesidir ve çoğu senaryoda çalışır. Belirli bir güvenlik düzeyini belirtmek için, CREATE ASSEMBLY deyiminin söz dizimini aşağıdaki gibi değiştirirsiniz:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
Öncekinin üçüncü satırını atlayarak SAFE izni ayarlanmış bir derleme oluşturmak da mümkündür.
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Derlemedeki kod SAFE izin kümesi altında çalıştırıldığında, işlem içi yönetilen sağlayıcı aracılığıyla yalnızca sunucu içinde hesaplama ve veri erişimi yapabilir.
EXTERNAL_ACCESS ve GÜVENSİz derlemeler oluşturma
EXTERNAL_ACCESS, kodun dosyalar, ağ, kayıt defteri ve ortam değişkenleri gibi sunucu dışındaki kaynaklara erişmesi gereken senaryoları giderir. Sunucu bir dış kaynağa her eriştiğinde, yönetilen kodu çağıran kullanıcının güvenlik bağlamının kimliğine bürüner.
UNSAFE kod izni, derlemenin doğrulanabilir bir şekilde güvenli olmadığı veya Win32 API'si gibi kısıtlanmış kaynaklara ek erişim gerektirdiği durumlar içindir.
SQL Server'da bir EXTERNAL_ACCESS veya UNSAFE derlemesi oluşturmak için aşağıdaki iki koşuldan birinin karşılanması gerekir:
Derleme, sertifikayla imzalanan tanımlayıcı ad veya Authenticode imzalı. Bu kesin ad (veya sertifika) SQL Server'da asimetrik anahtar (veya sertifika) olarak oluşturulur ve
EXTERNAL ACCESS ASSEMBLYiznine (dış erişim derlemeleri için) veyaUNSAFE ASSEMBLYiznine (güvenli olmayan derlemeler için) karşılık gelen oturum açma bilgilerine sahiptir.Veritabanı sahibinin (DBO)
EXTERNAL ACCESS ASSEMBLY(EXTERNAL ACCESSderlemeler için) veyaUNSAFE ASSEMBLY(UNSAFEderlemeler için) izni vardır ve veritabanında olarak ayarlanmışONvardır.
Daha önce listelenen iki koşul da derleme yükleme zamanında (yürütme dahil) denetlenmektedir. Derlemenin yüklenebilmesi için koşullardan en az birinin karşılanması gerekir.
Veritabanındaki TRUSTWORTHY veritabanı özelliğinin yalnızca sunucu işleminde ortak dil çalışma zamanı (CLR) kodunu çalıştırmak için ON olarak ayarlı olmadığını öneririz. Bunun yerine, master veritabanındaki derleme dosyasından bir asimetrik anahtar oluşturulmasını öneririz. Bu asimetrik anahtarla eşlenen bir oturum açma bilgisi oluşturulmalıdır ve oturum açma EXTERNAL ACCESS ASSEMBLY veya UNSAFE ASSEMBLY izni verilmelidir.
Aşağıdaki Transact-SQL deyimleri, asimetrik anahtar oluşturmak, bu anahtarla bir oturum açma eşlemek ve ardından oturum açma için EXTERNAL_ACCESS izin vermek için gereken adımları gerçekleştirir.
CREATE ASSEMBLY deyimini çalıştırmadan önce aşağıdaki Transact-SQL deyimlerini çalıştırmanız gerekir.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO
Note
Asimetrik anahtarla ilişkilendirmek için yeni bir oturum açma oluşturmanız gerekir. Bu oturum açma yalnızca izin vermek için kullanılır. Bir kullanıcıyla ilişkilendirilmesi veya uygulama içinde kullanılması gerekmez.
EXTERNAL ACCESS derlemesi oluşturmak için oluşturucunun derlemeyi oluştururken EXTERNAL ACCESS izni belirtmesi gerekir:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Aşağıdaki Transact-SQL deyimleri, asimetrik anahtar oluşturmak, bu anahtarla bir oturum açma eşlemek ve ardından oturum açma için UNSAFE izin vermek için gereken adımları gerçekleştirir.
CREATE ASSEMBLY deyimini çalıştırmadan önce aşağıdaki Transact-SQL deyimlerini çalıştırmanız gerekir.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin;
GO
Derlemenin UNSAFE izinle yükleneceğini belirtmek için, derlemeyi sunucuya yüklerken ayarlanan UNSAFE iznini belirtirsiniz:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Ayarların her birinin izinleri hakkında daha fazla bilgi için bkz. CLR tümleştirme güvenliği.
Related content
- CLR tümleştirme derlemelerini yönetme
- Derleme değiştirme
- Derleme bırakma
- CLR tümleştirme kodu erişim güvenliği
- TRUSTWORTHY veritabanı özelliği