PDA

View Full Version : آموزش تعیین امنیت در سیکیول سرور



espootin
جمعه 19 اردیبهشت 1393, 22:06 عصر
با سلام خدمت دوستان.
در این تاپیک می خوام مطالبی در مورد امنیت سیکیول سرور و نحوه اعمال و کنترل آن را براتون بذارم. امیدوارم براتون مفید باشه. اگر کاستی هم بود، لطفا کمک کنید کامل تر کنم.


امنیت در سیکیول سرور
سیکیول سرور در سطوح مختلفی به مدیران اجازه کنترل سطوح دسترسی می نماید، پس بنابراین باید شناخت کاملی از سطوح ، نقش ها، محدوده ها و آبجکت ها بدست آوریم.
سیکیول سرور شامل ۳ سطح : Server, SQL Server, Database می باشد که در هر سطح مدیر می تواند کنترل کاملی بروی دسترسی ها داشته باشد.

مراحل تنظیم سطوح دسترسی
برای تعیین و تنظیم سطوح دسترسی باید موارد زیر را بررسی و کنترل کرد:
1- تنظیم حالت اعتبار سنجی authentication modes
2- Principals and Securables
3- Permissions
1-3: Roles
2-3: Control Commands


برخی از اصطلاحات مهم و پرکاربرد:

Securable : آبجکت هایی که می توانند مورد دسترسی قرار بگیرند و کنترل شوند. مانند Tables, Views and Stored Procedures

Principle : آبجکت هایی هستند که در صورت داشتن مجوز می توانند به منابع دسترسی پیدا کنند. مانند Users

Schema : مجموعه ای از آبجکت های دیتابیس که زیر مجموعه یک Schema در یک دیتابیس قرار دارند.


۱- Authentication Modes
چارچوب امنیتی سیکیول سرور (SQL Server Security framework) مدیریت دسترسی به Securable ها را از طریق Authentication و Authorization کنترل می کند. نحوه عملکرد این بخش ها به شرح زیر است:

- Authentication : پروسه ورود به سیکیول سرور است که با در خواست توسط principle شروع می شود و سپس در صورت وجود اعتبار نامه (Credential) تصدیق می شود، سپس یک شناسه امنیتی منحصر به فرد دریافت می کند و معتبر می شود (Authenticated) .

- Authorization :‌ این پروسه تعیین می کند که Principle مورد نظر به چه منابعی می تواند دسترسی(Securable) داشته باشد و همچنین چه عملیاتی (Permission) نیز می تواند انجام دهد.



کنترل ورود(Authentication) را به دو صورت می توان تنظیم کرد‌ :

- حالت پیش فرض (Windows Authentication Mode)‌ :
در این حالت کاربران ویندوز می توانند بعنوان کاربران SQL Server ایفای نقش کنند و اجازه ورود دریافت کنند.

- حالت دوم، ترکیب (SQL Server and Windows Authentication Mode (Mixed Mode)) :
در این حالت،‌ هم می توانیم از کاربران ویندوز برای ورود استفاده کنیم و هم توسط کاربرانی که مستقیماً توسط سیکیول سرور ساخته می شوند، وارد شویم.

نکته : این حالت برای زمانی مناسب است که کاربرانی غیر از ویندوز نیز داریم.

برای تعیین نحوه ورود، بروی سرور راست کلیک کرده و سپس Properties را انتخاب کنید، آنگاه به قسمت Security بروید. از قسمت Server Authentication می توانید حالت مورد نظر خود را انتخاب کنید.
118819



نکته : دسترسی هایی که توسط سیکیول سرور ایجاد می شوند به مانند دسترسی های ویندوزی امن نیستند چرا که دسترسی های ویندوزی از اعتبار سنجی Kerberos استفاده می کند، این اعتبار سنجی که بسیار قوی است در سال ۱۹۸۰ توسط MIT توسعه داده شد. اما حالت اعتبارسنجی سیکیول سرور، بصورتی ساده و ناامن، نام کاربری و کلمه عبور را به صورت Hash در دیتابیس Master ذخیره می نماید. بنابراین توصیه می شود از حالت اول استفاده شود.



ساخت ورود :

ورود از طریق کاربران ویندوزی:

- با استفاده از دستور T-SQL :


CREATE LOGIN [ServerName\Ali] FROM WINDOWS WITH DEFAULT_DATABASE = [master];

ورود از طریق ورود های مستقیم سیکیول سرور :
- با استفاده از دستور T-SQL:

CREATE LOGIN [Ali]
WITH PASSWORD = 'StrongPassword',
DEFAULT_DATABASE = [master],
CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF;





۲- Principals and Securables

مدیر می تواند بروی هر سرور Securable (مانند جداول) دسترسی (permission) های لازم جهت استفاده Principal (کاربران) اعمال کند.


Principals و Securables در سطوح مختلف به شرح زیر می باشد:

1. Principals : می تواند یک کاربر خاص باشد یا یک نقش باشد که توسط چندین کاربر به کار گرفته می شود.


سه سطح Principals شامل زیر است:

1.1 : سطح ویندوزی (Windows-level) : گروه ها یا حساب های کاربری ویندوزی که توسط ویندوز تصدیق می شود.
- Domain Logins
- Local System Logins

2.1 : سطح سیکیول سرور (SQL Server-Level) : حساب های کاربری سیکیول سرور یا ویندوز که توسط سیکیول سرور تصدیق می شود.
- SQL Logins
- Windows Map Login ( انطباق ورود های ویندوزی)

3.1 : سطح دیتابیس (Database Level) : نقش ها و کاربران دیتابیس
- Users
- Roles
- Application Roles

نکته : Principal ها می توانند تک (Individual) باشند یا یک مجموعه (Collection) از Principals باشند. برای مثال کاربری در ویندوز به نام Guest، تک است در حالی که گروهی تعریف شده به نام Sys_AdminGr یک مجموعه از Principals است. مجموعه یک مزیت برای سهولت در مدیریت دسترسی ها است.

حال به بررسی دقیق تر Securables ها می پردازیم.


2. Securable :
آبجکت هایی هستند که می توانند توسط Principals مورد دسترسی قرار بگیرند.


سه محدوده از این آبجکت ها :

1.2 : محدوده سرور(Server Scope) :
این آبجکت ها در سطح سرور و خارج از دیتابیس قرار دارند.
- Logins
- HTTP EndPoint
- Event Notifications
- Databases

2.2 :محدوده دیتابیس (Database Scope) :
این آبجکت ها در هر دیتابیسی موجود و قابل کنترل می باشند.
- Schemas
- Users
- Roles
- CLR Assemblies
- DDL Triggers

نکته : توجه داشته باشید این محدوده فاقد آبجکت های محدوده Schema هست در حالی که آبجکت های محدوده Schema نیز در دیتابیس قرار دارند.

3.2 : محدوده طرح (Schema Scope) :
آبجکت های موجود در هر Schema
- Tables
- Views
- Stored Procedures
- Functions

نکته : توجه داشته باشید قرار دادن محدوده های مختلف جهت مدیریت بهتر می باشد.
118820






Permissions

برای اینکه Principle ها بتوانند به Securable ها دسترسی داشته باشند باید مجوز(Permission) لازم دریافت کنند. برای مثال برای اینکه کاربر Ali بتواند محتویات جدول مشتری را بخواند باید مجوز خواندن به کاربر Ali تخصیص داده شود.


تخصیص مجوز به Principles به دو صورت امکان پذیر است:

1. نقش :
نقش ها از پیش تعریف شده اند و دارای اعتبارات خاصی می باشند. در صورتی که به کاربر نقشی دهیم، آن کاربر تمامی اعتبارات آن نقش را دریافت خواهد کرد.

2. دستورات کنترلی :
ارائه مجوز با دستورات کنترلی، یعنی اینکه کاربر هر مجوزی که به آن نیاز دارد، به آن کاربر تخصیص دهیم.


نکته : برای سهولت بیشتر می توان مجوز را به یک گروه داد. با این وضعیت تمامی کاربران عضو آن گروه، آن مجوز ها را دریافت خواهند کرد.
اکنون به بررسی دقیق تری در خصوص دو مورد فوق می پردازیم :



1. نقش(Role) :
نقش ها در دو سطح سرور و دیتابیس قرار دارند. نقش ها مزیت بسیار سودمندی برای مدیریت بهتر کاربران و دسترسی آنها هستند.

1.1 : نقش های ثابت سرور(Fixed server-level role) :
این نقش ها را می توان به کاربر یا گروه انتساب داد. در ضمن نمی توان این نقش ها را ویرایش یا حذف کرد بلکه می توان نقش های جدیدی به آن افزود. این نقش ها شامل موارد زیر می باشند :

- Public: به صورت پیش فرض هر ورود این نقش را دارد و دارای حداقل مجوز های لازم است.
- Bulkadmin : می تواند دستورات BULK INSERT را اجرا نماید.
- Dbcreator : می تواند هر دیتابیسی را ساخته، ویرایش، حذف یا بازیابی نماید.
- Diskadmin : می تواند فایل های روی دیسک را مدیریت کند.
- Setupadmin : می تواند ارتباط بین سرور ها(Linked Servers) را بوجود بیاورد یا حذف کند.
- Processadmin : می تواند پروسه های در حال اجرا بروی یک نمونه سیکیول سرور را اجرا نماید.
- Securityadmin : می تواند تمامی ورود ها به سیکیول سرور را مدیریت نماید.
- Serveradmin : می تواند تمامی تنظیمات سمت سرور را انجام دهد و یا حتی سرور را خاموش کند.
- Sysadmin : تمامی اختیارات ممکن را دارا می باشد.

نحوه تخصیص نقش سرور به کاربر:
- با استفاده از دستورات T-SQL‌:

EXEC sp_addsrvrolemember [servername\Ali], sysadmin;


نقش های ثابت دیتابیس (Database-level role) :
این نقش نیز شامل مجموعه ای از مجوز ها می باشند که می توان به یک کاربر یا گروه انتساب داد .

- db_owner: تمامی اختیارات ممکن برای آن دیتابیس را دارا است ، در واقع مالک دیتابیس است.
- db_securityadmin : می تواند تمامی مجوز ها و نقش دیتابیس را مدیریت کند.
- db_accessadmin : می تواند تمامی ورود ها را مدیریت کند، کاربر یا گروه هایی را برای ورود تصدیق یا لغو نماید.
- db_backupoperator : می تواند از دیتابیس پشتیبان(Backup) تهیه نماید.
- db_ddladmin : می تواند هر نوع دستور DDL(Data Definition Language)‌ را اجرا نماید.
- db_datawriter : می تواند درج، حذف یا ویرایش در تمامی جداول انجام دهد.
- db_datareader : می تواند تمامی داده های جداول را بخواند.
- db_denydatawriter : نمی تواند هیچگونه درج، حذف یا ویرایش بروی داده ها انجام دهد.
- db_denydatareader : نمی تواند هیچگونه داده ای را ببیند و بخواند.

نحوه تخصیص نقش دیتابیس به کاربر :
- با استفاده از دستورات T-SQL :


EXEC sp_addrolemember db_securityadmin, ‘servername\Ali;


2. دستورات کنترلی:
در این روش شما به Principles مجوز هایی متناسب با نیاز آن تخصیص می دهید. توجه داشته باشید برای تامین امنیت باید حداقل مجوز های مورد نیاز را به کاربر دهید و از تخصیص مجوزهای اضافی به کاربران خودداری نمایید.


دستورات کنترلی تخصیص مجوز :
با استفاده از ۳ دستور زیر می توانیم به Principle ها اعطای مجوز نماییم:



Grant : جهت تخصیص مجوز
Deny : منع استفاده از یک مجوز
Revoke : گرفتن مجوز از یک Principle



مجوز های سیکیول سرور در دو گروه به شرح زیر می باشد:

- Statement Permissions :
این عبارات مجوز های ساخت و ویرایش Principle های سرور، دیتابیس و Schema را کنترل می نمایند. مانند :


Create Database, Create Table, Create View, Create Index and ...
مثال:

grant create any database to uAli;


- Object Permissions :
این مجوز ها دسترسی به داده ها را کنترل می کنند. این مجوز ها دارای ۱۲ نوع به شرح زیر می باشند .

Execute : امکان اجرای پروسیجر را فراهم می کند.
References : امکان گزینش داده های یک جدول در حالی که به جدول دیگر رجوع کرده است و مجوز دسترسی به آن جدول را ندارد.
Delete : امکان حذف
Update :‌امکان ویرایش
Insert : امکان درج
Select‌ : امکان گزینش داده
View Definition : امکان مشاهده کدهای SQL که برای ساخت آبجکت استفاده شده است.
Create : امکان ساخت آبجکت
Impersonate : ساخت کاربر جعلی
Take Ownership : امکان گرفتن مالکیت آبجکت
Alter‌ : امکان Create, Drop و Alter یک آبجکت را به کاربر می دهد.
Control : کنترل تمامی مجوز های آبجکت های دیتابیس مانند جداول و ویو ها.

مثال:



DENY SELECT ON Customers TO uAli;



در هنگام نصب سیکیول سرور :
در قسمت Database Engine Configuration ، سربرگ Server Configuration ، زمانی که شما دکمه Add Current User را می زنید،‌ با این عمل کاربر فعلی شما توسط سیکیول سرور نمایش داده می شود و شما می توانید به مرحله بعد بروید،‌ولی در واقع با انجام این کار،‌شما این کاربر را به عنوان تنها کاربر مدیر سیکیول سرور با نقش sysAdmin انتخاب کرده اید، پس باید توجه داشته باشید که در صورتی که این کاربر از بین رود دسترسی شما به سیکیول سرور نیز قطع خواهد شد.

نکته : شما توسط کاربر ابتدایی می توانید مجوز های دیگری دهید و یا حتی مدیریت را تغییر دهید.



کاربر sa :
کاربر sa دارای نقش sysAdmin و به صورت پیش فرض غیرفعال است. در صورتی که در هنگام نصب حالت ورود را از نوع Mixed Mode انتخاب کنید، کاربر sa نیز فعال خواهد شد.

توجه : در صورت تمایل برای فعال کردن کاربر sa، حتما رمز عبوری بسیار قوی برای آن انتخاب کنید، چرا که در صورت هک شدن تمامی کنترل ها، از دست شما خارج خواهد شد.


از توجه تون سپاسگذارم.

مشاهده منبع و متن کامل تر:
http://blog.dbtips.ir/2014/04/%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D8%AF%D8%B1-%D8%B3%DB%8C%DA%A9%DB%8C%D9%88%D9%84-%D8%B3%D8%B1%D9%88%D8%B1/