Assembly, T-SQL yerine, .NET Framework CLR ile SQL üzerinde yazılan kodların, store procedure, function, triggerlar aracılığı ile derlenen DLL dosyalarıdır.
PostgreSQL veya Oracle ile SQL Server’dan veri okumak ya da yazmak istediğimizde OPENQUERY\OPENROWSET gibi komutları Linked Server üzerinden çalıştırmak için CLR özelliğinin kapatılması gereklidir. Default olarak bu değer açık gelmektedir.
Assembly kullanabilmek için ilgili Instance altındaki database’in TRUSTWORTH özelliğinin aktif edilmesi gerekmektedir. Bu özellik default olarak OFF olarak kullanılmaktadır. Bu özellik sistemde güvenlik açığı oluşturabileceği için Database Properties kısmında değiştirilemez olarak görünmektedir. Aktif etmek için aşağıdaki scripti kullanabilirsiniz.
1 2 3 |
sp_configure 'clr strict security',0 reconfigure alter database msdb SET TRUSTWORTHY on |
TRUSTWORTH aktif edildikten sonra database üzerindeki assembly etkin olarak kullanılabilecektir. Fakat CLR Security özelliğinin kapalı olması güvenlik açığı oluşturduğundan dolayı. Bu özelliği aktif durumda bırakıp assembly trusted olarak sağlanması gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
use YourDB select assembly_id from sys.assemblies --Yukarıdaki Script ile assembly_id değeri aşağıda trusted ederken kullanılır. DECLARE @asmBin varbinary(max) ; DECLARE @sql nvarchar(max) select @asmBin=content from sys.assembly_files where assembly_id=65536 DECLARE @hash varbinary(64); SELECT @hash = HASHBYTES('SHA2_512', @asmBin); EXEC sp_add_trusted_assembly @hash, N'AssemblyName, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil' GO sp_configure 'clr strict security',1 reconfigure alter database msdb SET TRUSTWORTHY off |
Komutları ile assembly, trusted duruma getirilir. CLR security aktif edilir ve TRUSTWORTHY kapatılarak güvenlik sorunu ortadan kaldırılır.
Assembly oluştururken önem arz eden diğer konulardan biride permission konusudur.
Kod çalıştırılırken 3 tür permission bulunur. SAFE, UNSAFE ve EXTERNAL_ACCESS.
SAFE, Default olarak gelen değerdir ve genel olarak kullanılan değerdir. Bu permission ile sadece sunucu içerisinde kod çalıştırmak istersek kullanabiliriz. Sınırlıdır (Restricted)
EXTERNAL_ACCESS, kodun sunucu dışındaki kaynaklara erişmesi gerekirse bu permission kullanılması gerekmektedir. File, Network kaynaklarına erişim sağlanabilir.
UNSAFE, kodun güvenli olmadığını ek erişim gereken Win32 gibi API kaynaklara erişim gerektiğinde kullanılır. Sınırsızdır (Unrestricted)
0 Yorum