مکانیزم چیست؟مجموعه ای ازاجسام صلب ومقاوم که چنان به بهم متصل شده اند که دارای حرکت نسبی نسبت به هم هستند
حال به بررسی یکی از مکانیزمهای مهم وچگونگی کاربرد آن در صنعت میپردازیم:
مکانیزم لنگ و لغزنده درموتور های احتراق داخلی وموتور شورلت v-8شرکت جنرال موتورز هم مورد استفاده قرارگرفته
است. در مکانیزم لنگ و لغزنده مجموعه ای از حرکتهای رفت و برگشتی ونوسانی ودورانی با هم ترکیب شده اند. اگردر یک مکانیزم قدرت مکانیکی قابل اغماض باشد(انتقال قدرت توسط اجزا قابل اغماض باشد) طراحی بر اساس شکل حرکت ودر درجه دوم مقاومت مکانیکی مورد بررسی قرار میگیرد.
تاریخچه مکانیزم در ایران و کاربرد آن
Code Access Security
وقتی که یک فایل اجرایی را اجرا میکنید، این فایل با دسترسی کاربری که آن را اجرا میکند، اجرا خواهد شد. در وقتی که با عنوان dministrator وارد سیستم میشوید، چنانچه کدی را اجرا کنید، این کد به همراه قابلیت دسترسی administrator اجرا خواهد شد. با استفاده از مکانیزم Code Access Security، کد با دسترسی که خودش تعریف میکند، اجرا خواهد شد. به عبارت دیگر، علاوه بر دسترسی کاربری که کد را اجرا میکند، خود کد هم دارای هویت و دسترسی خواهد شد. تمام کدهایی که به صورت managed هستند، ازCode Access Security استفاده میکنند، که این استفاده میتواند به صورت صریح توسط نویسنده کد عنوان شود و یا NET. به صورت پیشفرض، تنظیمات پیشفرض را برای آن اعمال کند. بهطور کلی کارهایی که با Code Access Security میتوان انجامداد عبارتند از:
1- تعریف مجوزهای دسترسی (Permission)
تعریف و تنظیم سیاستهای امنیتی (Security Policy)
درخواست مجوز (Permission) توسط کد برای خودش جهت اجرای صحیح برنامه
امکان درخواست مجوز توسط کد برای فراخوانی کد. به عبارت دیگر برنامه از اجراکننده خود درخواست میکند.
حتماً مجوز خاصی داشته باشد.
درخواست امضای دیجیتال توسط کد برای اجراکننده کد. به عبارت دیگر کد از اجراکننده خود میخواهد حتماً امضای CA خاصی را داشته باشد.
جهت استفاده از این مکانیزم امنیتی چند مورد را باید رعایت کنید:
یکم: باید managed code تولید کنید و کد نوشتهشده توسط شما type safe باشد (فقط ++VC قادر به تولیدunmanaged code میباشد. لذا حالتهای پیچیده متعددی را میتواند تولید کند که فراتر از موضوع این مقاله میباشد. در C هم چنانچه از کلمه کلیدی unsafe استفاده نکنید کد شما type safe خواهد بود.)
دوم: از یکی از دو روشی که Code Access Security را وارد برنامه شما میکند، استفاده کنید که در ادامه توضیح داده میشود.
سوم: که از همه مهمتر میباشد، ضروری است هنگام طراحی و تحلیل برنامه، تحلیلی امنیتی نیز روی کلاسهای خود داشته باشید و بدین ترتیب مجوزهای مختلفی را که یک کلاس و یا متد در شرایط مختلف لازم دارد را پیدا کنید و تدابیر لازم جهت پیادهسازی را بیندیشید.
همانطور که اشاره شد،Code Access Security به دو شیوه میتواند در کدهای شما پیادهسازی شود که هر یک قابلیتهای خاصی را در اختیار شما قرار میدهد:
● imerative security syntax
در این مدل از یک سری کلاسهایی که سرویسهای امنیتی را فراهم میکنند، اشیائی گرفته و مکانیزمcode Access را پیادهسازی میکنند. از این مدل زمانی استفاده میشود که تصمیمات امنیتی باید به صورت runtime گرفته شوند و تمام مسایل و تصمیمات در هنگام طراحی برنامه روشن و واضح نیستند. جهت روشنتر شدن موضوع به مثال زیر توجه کنید:
public Class MyClass
Public sub New
End Sub
Public Sub MyMethod1()
'using imperative security syntax to demand FileIOPermission
Dim MyFileIOPerm As New FileIOPermission()
MyFileIOPerm.Demand()
End Sub
End Class
در اینجا با استفاده از کلاس FileIOPermission مشخص کردهایم که فراخواننده این کد باید اجازه دسترسی، خواندن و نوشتن فایلها را داشته باشد. نکته قابل توجه این است که فراخواننده فقط جهت اجرای تابع 1 My Method این دسترسی را لازم دارد و چنانچه در حین استفاده از برنامه سراغ این تابع نرود، به این دسترسی هم نیازی نخواهد داشت. کلاسهای زیادی وجود دارند که همانند FileIOPermission دسترسی امنیتی خاصی را تعریف میکنند و تقریباً تمام این کلاسها غیرقابل ارثبری میباشند. شما میتوانید با توجه به نیاز خاصی که در یک تابع و یا کلاس خود دارید، از این کلاسها استفاده کنید. در اینجا برخی از پرکاربردترین این کلاسها را نام میبریم:
Registry Permission،Web Permission ،Environment
Permission ،Printing Permission ،Security Permission
● Declarative Security Syntax
در این شیوه با استفاده از attributeها، مکانیزم code Access
security در برنامه پیادهسازی میشود. بدیهی است با توجه به اینکه از attributeها جهت تعیین و یا درخواست سطح دسترسی استفاده میکنیم، مجوزهای کلاسها و یا توابع باید به صورت ثابت در حین طراحی برنامه مشخص شوند. از این رو انعطافپذیری مدل قبلی جهت تصمیمگیری در زمان اجرا را در این حالت نخواهیم داشت. در واقع چنانچه در حین طراحی برنامه وجود مجوز خاصی را جهت اجرای برنامه به صورت دائم ضروری میدانید، استفاده از این روش مناسب میباشد و با استفاده از آن میتوانید در هنگام لودشدن برنامه، مجوزهای خاصی را درخواست کنید و در صورتی که مجوز موردنظر داده نشود، از لود شدن برنامه جلوگیری کنید. به عنوان مثال به کد زیر توجه کنید:
public Class MyClass
Public sub New
'Constructor is protected by the security call
End Sub
Public Sub MyMethod1()
'Method is protected by the security call
End Sub
End Class
همانطور که ملاحظه میکنید در سطح کلاس My Class یک attribute قرار گرفته که مشخص میکند استفادهکننده این کلاس (فراخواننده برنامه) باید دارای مجوز FileIOPermission باشد. توجه کنید که attribute میتواند در سطح کلاس، یک متد خاص و یا حتی اسمبلی باشد،