دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
مقایسه دو لیست در سیشارپ
1404/11/18 -
Queue در سی شارپ چیست؟
1404/11/17 -
NuGet چیست؟
1404/11/16 -
معرفی Ledger در SQL Server
1404/11/13 -
معرفی پرکاربردترین دستورات SQL Server
1404/11/07
استفاده از Credential و Proxy در SQL Server Agent
مقدمه
در محیطهای واقعی SQL Server، یکی از دغدغههای اصلی مدیران دیتابیس و برنامهنویسان، اجرای Jobها به شکلی امن و قابل کنترل است.
بسیاری از تسکها فقط به داخل دیتابیس محدود نمیشوند و برای انجام درست کار خود نیاز دارند به منابع خارجی مثل فایل سیستم، شبکه، FTP، اسکریپتهای PowerShell یا حتی سرویسهای تحت وب دسترسی داشته باشند.
اما چالش دقیقاً از همینجا شروع میشود؛ اینکه این دسترسیها چگونه بدون به خطر انداختن امنیت سیستم فراهم شوند. اینجاست که دو مفهوم بسیار مهم وارد بازی میشوند:
Credential و Proxy به شما کمک میکنند: امنیت را حفظ کنید دسترسیها را محدود و دقیق مدیریت کنید.
Credential در SQL Server Agent چیست؟
Credential در SQL Server Agent یک فضای امن برای ذخیره نام کاربری و رمز عبور است که به شما امکان میدهد Jobها و سرویسها را با هویت مشخص اجرا کنید، بدون اینکه مجبور باشید رمز عبور را مستقیم در اسکریپتها قرار دهید.
این ویژگی باعث میشود امنیت Jobها افزایش یافته و دسترسیها به منابع خارجی کنترلشده باشند.
به زبان ساده:
Credential = هویت خارجی امن ذخیرهشده در SQL Server که میتواند توسط Jobها مورد استفاده قرار گیرد
کاربرد اصلی Credential
Credential معمولاً زمانی استفاده میشود که یک Job نیاز دارد به منابع خارج از SQL Server دسترسی پیدا کند، بدون اینکه سطح دسترسی کل سرور یا دیتابیس افزایش یابد. نمونههای رایج شامل:
-
دسترسی به فولدرهای شبکه و مسیرهای اشتراکی
-
اتصال به FTP Server برای آپلود یا دانلود فایل
-
اجرای PowerShell Script با هویت خاص
-
ارتباط با سیستمها یا سرویسهای خارجی دیگر
این روش به شما اجازه میدهد Jobها را با امنیت بالا و رعایت اصول Least Privilege اجرا کنید، در حالی که مدیریت Credential و دسترسیها ساده و قابل کنترل باقی میماند.
خصوصیات و ویژگیهای Credential
Credential نه تنها هویت امن برای Jobها فراهم میکند، بلکه با ویژگیهای پیشرفته خود اجرای Jobها را کنترلشده و امن میسازد.
استفاده از Credential به شما کمک میکند دسترسیها را دقیق مدیریت کرده و امنیت عملیات SQL Server Agent را به سطح حرفهای برسانید.
ویژگیهای کلیدی Credential
-
ذخیره امن نام کاربری و پسورد
-
عدم نیاز به هاردکد کردن رمز در اسکریپتها
-
قابل استفاده توسط Proxy
-
رمزگذاریشده در سطح SQL Server
-
امکان محدودسازی دسترسی به کاربران خاص
نحوه ایجاد Credential در SQL Server
قبل از ساخت Proxy، باید Credential بسازیم.
مثال عملی ایجاد Credential
برای درک بهتر کاربرد Credential، فرض کنید میخواهیم یک Job در SQL Server Agent داشته باشیم که به یک فولدر شبکه مشترک دسترسی پیدا کند تا فایلها را بخواند یا ذخیره کند.
برای این کار، ابتدا یک Credential ایجاد میکنیم که شامل هویت کاربر شبکه و رمز عبور آن باشد.
مثال عملی:
CREATE CREDENTIAL FileAccessCred
WITH IDENTITY = 'DOMAIN\FileUser',
SECRET = 'P@ssw0rd123';
در این مثال:
`IDENTITY` = نام کاربری ویندوز یا دامنه که دسترسی لازم به فولدر شبکه دارد
`SECRET` = رمز عبور همان کاربر
با این روش، Job ما میتواند با هویت امن و رمزنگاریشده به منابع شبکه دسترسی پیدا کند، بدون آنکه نیازی به ذخیره رمز عبور در اسکریپت یا اعطای دسترسی کامل به SQL Server باشد.
نکته مهم: همیشه برای Credential از حساب کاربری با دسترسی محدود (Least Privilege) استفاده کنید تا امنیت Jobها و سرور حفظ شود.
Proxy در SQL Server Agent چیست؟
Proxy مکانیزمی در SQL Server Agent است که ارتباط بین Job و Credential را مدیریت میکند و تعیین میکند فرآیند اجرایی Job با کدام حساب کاربری انجام شود.
در این ساختار، اجرای Job همچنان بر عهده SQL Server Agent است، اما سطح دسترسی و هویت امنیتی از Credential مرتبط با Proxy تأمین میشود.
این قابلیت امکان اجرای Jobها با دسترسی کنترلشده و مستقل از حساب سرویس SQL Server Agent را فراهم میکند.
تفاوت Credential و Proxy
| مفهوم | نقش |
| Credential | نگهدارنده نام کاربری و رمز |
| Proxy | واسطه استفاده از Credential در Job |
بدون Proxy، Credential عملاً برای Job قابل استفاده نیست.
موارد استفاده Proxy در SQL Server Agent
در سناریوهای واقعی، Proxy زمانی اهمیت پیدا میکند که Job شما نیاز به دسترسی خارج از محدوده دیتابیس داشته باشد؛ یعنی جایی که دیگر اکانت پیشفرض SQL Server پاسخگو نیست.
در این شرایط، Proxy بهعنوان یک واسط امن عمل میکند تا هر عملیات فقط با سطح دسترسی مشخص اجرا شود، نه بیشتر.
رایجترین کاربردهای Proxy در SQL Server Agent عبارتاند از:
-
اجرای اسکریپتهای PowerShell برای اتوماسیون
-
اجرای پکیجهای SSIS در محیطهای عملیاتی
-
دسترسی کنترلشده به فایل سیستم سرور یا شبکه
-
ارتباط با سرویسهای خارجی مثل API یا وبسرویسها
-
اجرای دستورات Cmd و فایلهای Batch بدون نیاز به sysadmin
مراحل ایجاد Proxy
برای ساخت یک Proxy استاندارد و امن در SQL Server Agent، بهتر است این فرآیند را مرحلهبهمرحله انجام دهید تا هم امنیت حفظ شود و هم مدیریت دسترسیها سادهتر باشد.
مرحله 1: ایجاد Credential
در این مرحله یک Credential تعریف میکنیم که شامل نام کاربری و رمز عبور واقعی سیستم عامل یا شبکه است.
مرحله 2: ایجاد Proxy
حالا Credential ساختهشده را به یک Proxy متصل میکنیم تا قابل استفاده در Jobها باشد:
EXEC msdb.dbo.sp_add_proxy
@proxy_name = 'FileProxy',
@credential_name = 'FileAccessCred',
@enabled = 1;
مرحله 3: تعیین Subsystem
مشخص میکنیم این Proxy برای چه نوع عملیاتی مجاز باشد؛ مثلاً فقط PowerShell:
EXEC msdb.dbo.sp_grant_proxy_to_subsystem
@proxy_name = 'FileProxy',
@subsystem_name = 'PowerShell';
مرحله 4: اتصال Proxy به کاربر
در نهایت تعیین میکنیم کدام Login اجازه استفاده از این Proxy را داشته باشد:
EXEC msdb.dbo.sp_grant_login_to_proxy
@proxy_name = 'FileProxy',
@login_name = 'AppUser';
با این ساختار، شما یک مدل کاملاً حرفهای و امن دارید که در آن هر Job فقط با هویت مشخص، دسترسی محدود و بدون ریسک امنیتی اجرا میشود؛ دقیقاً همان چیزی که در معماری مدرن دیتابیس انتظار میرود.
مثال کاربردی واقعی
فرض کنید یک Job زمانبندیشده داریم که هر شب باید چند کار پشتسرهم انجام دهد؛ اول از یک API داده دریافت کند، بعد خروجی را در یک فایل روی سرور ذخیره کند و در نهایت اطلاعات را وارد دیتابیس نماید.
این دقیقاً همان روشی است که در پروژههای واقعی سازمانی بسیار رایج است.
بدون استفاده از Proxy
در این حالت معمولاً مجبور میشویم Job را با دسترسی `sysadmin` اجرا کنیم ❌
یعنی همان اکانتی که تقریباً به همهچیز دسترسی دارد؛ از فایل سیستم گرفته تا تنظیمات حیاتی سرور.
با استفاده از Proxy
اما در مدل اصولی:
یک Credential تعریف میکنیم که فقط شامل یک کاربر شبکه با دسترسی محدود است
یک Proxy میسازیم که فقط به Subsystem مربوط به PowerShell متصل است
و Job دقیقاً فقط همان سطح دسترسی لازم را دارد، نه بیشتر
نتیجه این میشود که Job کار خودش را انجام میدهد، بدون اینکه امنیت کل سرور قربانی راحتی ما شود.
امنیت Job در SQL Server Agent
یکی از مهمترین مزایای واقعی Credential و Proxy، ایجاد یک لایه امنیتی هوشمند بین Jobها و منابع حساس سیستم است.
این مکانیزم باعث میشود هر عملیات با هویت مشخص و قابل کنترل اجرا شود، نه با دسترسی نامحدود.
مشکلات اجرای مستقیم Job با sysadmin
وقتی Jobها را مستقیماً با sysadmin اجرا میکنیم، عملاً تمام قفلهای امنیتی را باز گذاشتهایم:
دسترسی کامل به کل سرور و سیستم عامل
امکان حذف یا تغییر دیتابیسها بدون هیچ محدودیتی
افزایش شدید ریسک نفوذ در صورت سوءاستفاده
نبود هیچ سطحبندی منطقی برای دسترسیها
به زبان ساده، استفاده نکردن از Proxy یعنی تبدیل SQL Server Agent به یک نقطه ضعف امنیتی بهجای یک ابزار حرفهای اتوماسیون.
مزایای امنیتی استفاده از Credential و Proxy
استفاده از Credential و Proxy در SQL Server Agent فقط یک قابلیت فنی نیست، بلکه یک رویکرد امنیتمحور برای اجرای Jobهاست.
این دو ابزار کمک میکنند تا اجرای تسکها دقیقاً بر اساس نیاز واقعی انجام شود، نه با دسترسیهای خطرناک و غیرقابل کنترل.
مهمترین مزایای امنیتی این مدل عبارتاند از:
-
اجرای Jobها بدون نیاز به سطح دسترسی `sysadmin`
-
پیادهسازی اصل Least Privilege (حداقل دسترسی ممکن)
-
جلوگیری از افشای مستقیم نام کاربری و رمز عبور در Jobها
-
امکان لاگگیری شفاف و دقیق از دسترسیها و اجراها
-
تفکیک مسئولیتها بین تیم دیتابیس، شبکه و امنیت (Separation of Duties)
بهترین Practice ها در سال 2026
با توجه به استانداردهای جدید امنیت اطلاعات و الزامات سازمانی، استفاده از Credential و Proxy باید کاملاً ساختارمند و قابل ممیزی باشد.
در معماریهای مدرن، این موارد بهعنوان بهترین رویه (Best Practice) شناخته میشوند:
-
برای هر Job یک Proxy مستقل تعریف شود
-
هر Proxy فقط به یک Subsystem خاص متصل باشد
-
رمزهای Credential حداکثر هر 90 روز تغییر داده شوند
-
هرگز از اکانتهایی مثل Domain Admin استفاده نشود
-
لاگ اجرای Jobها بهصورت منظم بررسی و آرشیو شود
این رویکرد باعث میشود SQL Server Agent با سیاستهای امنیتی سال 2026 کاملاً همراستا باشد.
اشتباهات رایج در استفاده از Credential و Proxy
با وجود اهمیت این مفاهیم، بسیاری از تیمها هنوز از آنها بهشکل نادرست استفاده میکنند و ناخواسته امنیت سیستم را کاهش میدهند.
رایجترین خطاها عبارتاند از:
-
استفاده از یک Proxy مشترک برای تمام Jobها
-
اختصاص دسترسیهای بیش از نیاز واقعی
-
ذخیره نام کاربری و رمز عبور داخل متن Job
-
اجرای همه Jobها با اکانتهایی مثل `sa` یا sysadmin
-
نبود مستندات مشخص برای Credential های تعریفشده
این اشتباهات عملاً فلسفه وجودی Proxy را زیر سؤال میبرد.
چه زمانی اصلاً به Proxy نیاز نداریم؟
در برخی پروژهها اصلاً نیازی به پیچیدگی Credential و Proxy نیست. اگر Job شما فقط:
- چند Query ساده SQL اجرا میکند
- هیچ ارتباطی با منابع خارجی ندارد
- و صرفاً روی همان دیتابیس کار میکند
در این حالت، اجرای مستقیم با SQL Server Agent کاملاً کافی است و استفاده از Proxy فقط باعث افزایش پیچیدگی بدون ارزش واقعی خواهد شد.
پرسشهای استفاده از Credential و Proxy در SQL Server Agent
1. آیا میتوان یک Credential را به چند Proxy داد؟
بله، اما از نظر امنیتی توصیه نمیشود.
2. آیا Proxy جایگزین Role های SQL میشود؟
خیر. Proxy فقط برای اجرای Job است، نه کنترل دسترسی دیتابیس.
نتیجهگیری
Credential و Proxy در SQL Server Agent ستون اصلی اجرای امن، حرفهای و قابل کنترل Jobها هستند.
با استفاده صحیح از این دو مفهوم، میتوانید بدون وابستگی به sysadmin، دسترسیها را دقیق مدیریت کنید، ریسکهای امنیتی را کاهش دهید و معماری دیتابیس خود را با استانداردهای امنیتی سال 2026 کاملاً همراستا نگه دارید.
بهعبارت ساده، اگر به دنبال اتوماسیون پایدار و امن هستید، Credential و Proxy دیگر یک گزینه نیستند، بلکه یک ضرورت محسوب میشوند.
دوره های مرتبط
آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .







