استخدام التجميعات التي يمكن التحقق من صحتها مع SQL Server

الإجراءات المخزنة الموسعة المعبئة في حزم مكتبات الارتباط الحيوي (DLLs) ، توفر طريقة لتوسيع الأداء الوظيفي SQL Server من خلال دوال تم تطويرها بـ Visual C++. يتم تطبيق ‏‫الإجراءات المخزنة الموسعة كدالات داخل DLLs. بالإضافة إلى وظائف الإجراءات المخزنة الموسعة يمكنك أيضاً تعريف أنواع معرفة من قبل المستخدم و الدالات التجميعية (مثل SUM أو AVG).

عند تنفيذ عميل إجراء مخزن موسع,يبحث SQL Server عن DLL المقترن بالإجراء المخزن الموسع و يحمّل الـ DLL. يستدعي SQL Server الإجراء المخزن الموسع المطلوب ويقوم بالتنفيذ ضمن سياق أمان محدد. ثم يقوم الإجراء المخزن الموسع بتمرير مسارات مجموعات النتيجة وإرجاع معلمات مرة أخرى إلى الخادم.

SQL Server 2005 يوفر ملحقات Transact-SQL ـ(T-SQL) للسماح لك بتثبيت ‏‫تجميعات قابلة للتحقق في SQL Server. تحدد مجموعة أذونات SQL Server سياق الأمان مع مستويات الأمان التالية:

  • وضع ‏‫غير مقيد: قم بتشغيل التعليمات البرمجية على مسؤوليتك الخاصة; لا يلزم أن تكون التعليمات البرمجية تم التحقق من أنها آمنة النوع.

  • الوضع الآمن قم بتشغيل التعليمات البرمجية التى تم التحقق من أنها آمنة النوع; المترجمة برمجياً باستخدام /clr:safe.

يتطلب الوضع الآمن التجميعات المنفذة أن تكون تم التحقق من أنها آمنة النوع.

لإنشاء وتحميل تجميع قابل لتحقق في SQL Server استخدم أوامر Transact-SQL ـCREATE ASSEMBLY و DROP ASSEMBLY كما يلي:

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH 
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

الأمر PERMISSION_SET يعيّن سياق أمان كما يمكن أن يكون لديك قيم UNRESTRICTED أو SAFE أو EXTENDED.

بالإضافة إلى ذلك، يمكنك استخدام الأمر CREATE FUNCTION للربط بأسماء أساليب في فئة:

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

مثال

البرنامج النصي SQL التالي (على سبيل المثال، المسمى "MyScript.sql") يقوم بتحميل تجميع في SQL Server وتوفير أسلوب فئة:

-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from 
'c:\stockNoEA.dll'
with permission_set safe

-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go

-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go

يمكن تنفيذ البرامج النصية SQL بشكل تفاعلي في محلل استعلام SQL أو في سطر أوامر الأداة المساعدة sqlcmd.exe. سطر الأوامر التالي يتصل بـ MyServer، و يستخدم قاعدة البيانات الافتراضية ، و يستخدم اتصال موثوق بها ، و يدخل MyScript.sql و يخرج MyResult.txt.

sqlcmd –S MyServer -E –i myScript.sql –o myResult.txt

راجع أيضًا:

المرجع

كيفية القيام بما يلي: ترحيل إلى clr:safe/

Classes, Structures, and Unions