آموزش جامع تابع CONNECTIONPROPERTY در SQL Server با ۱۰ مثال عملی
بخش مهمی از کار با SQL Server به خواندن درست Metadata و تفسیر محتاطانه مقادیر سیستمی وابسته است. در این مقاله، CONNECTIONPROPERTY از سطح مقدماتی تا سناریوهای حرفهای بررسی میشود و هر مثال با خروجی نمونه ارائه شده است.
برای عیبیابی TCP در برابر Shared Memory، بررسی Kerberos یا NTLM و ثبت منبع اتصال در گزارشهای امنیتی مفید است. تمرکز آموزش بر این است که CONNECTIONPROPERTY در چه Contextی اجرا شود، نتیجه آن چگونه تفسیر شود و چه زمانی باید از یک DMV یا کاتالوگویوی جایگزین کمک گرفت.
برای مشاهده جایگاه CONNECTIONPROPERTY میان سایر توابع و شمارندهها، راهنمای جامع توابع کمکی کارایی و Metadata در SQL Server را نیز مطالعه کنید.
تعریف و کاربرد اصلی CONNECTIONPROPERTY
تابع CONNECTIONPROPERTY اطلاعاتی درباره اتصال جاری مانند Transport، Protocol، Auth Scheme و آدرسهای شبکه میدهد. این تعریف در ظاهر کوتاه است، اما استفاده درست از CONNECTIONPROPERTY به درک مفاهیمی مانند net_transport، auth_scheme و client_net_address وابسته است.
قاعده عملی CONNECTIONPROPERTY: ابتدا ورودی و Context را معتبر کنید، سپس خروجی را با نوع داده و معنای واقعی آن تفسیر کنید.
Syntax تابع یا متغیر CONNECTIONPROPERTY
SELECT CONNECTIONPROPERTY ( property ) AS Result;
پارامترهای CONNECTIONPROPERTY
| پارامتر | توضیح |
|---|
| property | نام ویژگی مانند net_transport، protocol_type، auth_scheme، client_net_address یا local_tcp_port. |
نوع خروجی و رفتار NULL در CONNECTIONPROPERTY
sql_variant و برای Property نامعتبر یا ویژگی ناموجود مقدار NULL. در کد تولیدی بهتر است نوع مقصد بهصورت صریح تعیین شود؛ زیرا تبدیل ضمنی میتواند مقایسه، مرتبسازی یا ذخیره نتیجه CONNECTIONPROPERTY را مبهم کند.
مفاهیم کلیدی مرتبط با CONNECTIONPROPERTY
- net_transport
- auth_scheme
- client_net_address
- local_net_address
- TCP
- Kerberos
- connection diagnostics
تصویر نخست، ارتباط CONNECTIONPROPERTY را با مفاهیم اختصاصی net_transport، auth_scheme، client_net_address و local_net_address نشان میدهد؛ این روابط مبنای انتخاب ورودی و تفسیر خروجی هستند.
سناریوهای واقعی استفاده از CONNECTIONPROPERTY
سناریوی 1 برای CONNECTIONPROPERTY، «تشخیص Kerberos» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
سناریوی 2 برای CONNECTIONPROPERTY، «بررسی TCP Port» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
سناریوی 3 برای CONNECTIONPROPERTY، «عیبیابی Shared Memory» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
سناریوی 4 برای CONNECTIONPROPERTY، «ثبت مشخصات اتصال» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
مثالهای عملی CONNECTIONPROPERTY از ساده تا حرفهای
مثال 1: نوع Transport
روش انتقال اتصال جاری را میخوانیم. این سناریو بهطور اختصاصی برای درک رفتار CONNECTIONPROPERTY طراحی شده است.
SELECT CONNECTIONPROPERTY(N'net_transport') AS NetTransport;
در اتصال محلی ممکن است Shared memory مشاهده شود. هنگام استفاده سازمانی از CONNECTIONPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
مثال 2: طرح احراز هویت
Kerberos یا NTLM بودن اتصال را بررسی میکنیم. این سناریو بهطور اختصاصی برای درک رفتار CONNECTIONPROPERTY طراحی شده است.
SELECT CONNECTIONPROPERTY(N'auth_scheme') AS AuthScheme;
برای تشخیص Double Hop، این Property نقطه شروع خوبی است. هنگام استفاده سازمانی از CONNECTIONPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
مثال 3: آدرس Client
نشانی شبکه Client اتصال جاری را نمایش میدهیم. این سناریو بهطور اختصاصی برای درک رفتار CONNECTIONPROPERTY طراحی شده است.
SELECT CONNECTIONPROPERTY(N'client_net_address') AS ClientAddress;
آدرس را در لاگ عمومی بدون سیاست امنیتی منتشر نکنید. هنگام استفاده سازمانی از CONNECTIONPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
مثال 4: پورت محلی SQL Server
پورت TCP اتصال جاری را میخوانیم. این سناریو بهطور اختصاصی برای درک رفتار CONNECTIONPROPERTY طراحی شده است.
SELECT CONNECTIONPROPERTY(N'local_tcp_port') AS LocalTcpPort;
برای Shared Memory مقدار ممکن است NULL باشد. هنگام استفاده سازمانی از CONNECTIONPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
تصویر دوم، جریان اجرای CONNECTIONPROPERTY را از ورودی و اعتبارسنجی تا تولید خروجی نمایش میدهد و نشان میدهد که TCP در کدام مرحله باید کنترل شود.
ادامه مثالهای پیشرفته CONNECTIONPROPERTY
مثال 5: گزارش کامل اتصال
چند Property کلیدی را در یک Snapshot جمع میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون CONNECTIONPROPERTY است.
SELECT
@@SPID AS SessionId,
CONNECTIONPROPERTY(N'net_transport') AS NetTransport,
CONNECTIONPROPERTY(N'protocol_type') AS ProtocolType,
CONNECTIONPROPERTY(N'auth_scheme') AS AuthScheme,
CONNECTIONPROPERTY(N'client_net_address') AS ClientAddress,
CONNECTIONPROPERTY(N'local_net_address') AS ServerAddress,
CONNECTIONPROPERTY(N'local_tcp_port') AS ServerPort;
| SessionId | NetTransport | ProtocolType | AuthScheme | ClientAddress | ServerAddress | ServerPort |
|---|
| 57 | TCP | TSQL | KERBEROS | 10.10.20.45 | 10.10.20.10 | 1433 |
این Snapshot برای Ticketهای اتصال بسیار مفید است. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از CONNECTIONPROPERTY جلوگیری میکند.
مثال 6: مدیریت Property نامعتبر
نام اشتباه را به NULL خوانا تبدیل میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون CONNECTIONPROPERTY است.
SELECT COALESCE(
CONVERT(nvarchar(128), CONNECTIONPROPERTY(N'bad_property')),
N'NULL'
) AS Result;
اسکریپت باید Propertyهای غایب را بدون خطای ثانویه مدیریت کند. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از CONNECTIONPROPERTY جلوگیری میکند.
مثال 7: کنترل الزام TCP
برای Job خاص فقط اتصال TCP را مجاز میدانیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون CONNECTIONPROPERTY است.
IF CONVERT(nvarchar(128), CONNECTIONPROPERTY(N'net_transport')) <> N'TCP'
THROW 51005, N'این عملیات باید از اتصال TCP اجرا شود.', 1;
SELECT N'اتصال TCP تأیید شد' AS Result;
این شرط فقط در سناریوی دارای دلیل عملیاتی روشن استفاده شود. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از CONNECTIONPROPERTY جلوگیری میکند.
مثال 8: تشخیص Kerberos ناموفق
Auth Scheme را به پیام راهنما تبدیل میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون CONNECTIONPROPERTY است.
SELECT CASE CONVERT(nvarchar(128), CONNECTIONPROPERTY(N'auth_scheme'))
WHEN N'KERBEROS' THEN N'Kerberos فعال است'
WHEN N'NTLM' THEN N'اتصال با NTLM برقرار شده است'
WHEN N'SQL' THEN N'SQL Authentication استفاده شده است'
ELSE N'طرح احراز هویت دیگر یا نامشخص'
END AS AuthenticationDiagnosis;
| AuthenticationDiagnosis |
|---|
| Kerberos فعال است |
برای نتیجهگیری امنیتی، SPN و Delegation را نیز بررسی کنید. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از CONNECTIONPROPERTY جلوگیری میکند.
مثال 9: مقایسه با DMV اتصال جاری
Property را با sys.dm_exec_connections اعتبارسنجی میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون CONNECTIONPROPERTY است.
SELECT c.session_id,
c.net_transport AS DmvTransport,
CONNECTIONPROPERTY(N'net_transport') AS FunctionTransport,
c.client_net_address
FROM sys.dm_exec_connections AS c
WHERE c.session_id = @@SPID;
| session_id | DmvTransport | FunctionTransport | client_net_address |
|---|
| 57 | TCP | TCP | 10.10.20.45 |
DMV جزئیات بیشتری از Connection جاری ارائه میدهد. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از CONNECTIONPROPERTY جلوگیری میکند.
مثال 10: ثبت حداقلی و امن
فقط داده لازم برای عیبیابی را انتخاب میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون CONNECTIONPROPERTY است.
SELECT
@@SPID AS SessionId,
CONVERT(nvarchar(128), CONNECTIONPROPERTY(N'net_transport')) AS Transport,
CONVERT(nvarchar(128), CONNECTIONPROPERTY(N'auth_scheme')) AS AuthScheme,
SYSDATETIME() AS CapturedAt;
| SessionId | Transport | AuthScheme | CapturedAt |
|---|
| 57 | TCP | KERBEROS | 2026-07-25 00:35:00 |
اصل حداقلسازی داده را در ثبت آدرسهای شبکه رعایت کنید. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از CONNECTIONPROPERTY جلوگیری میکند.
خطاهای رایج در کار با CONNECTIONPROPERTY
خطای 1 در استفاده از CONNECTIONPROPERTY
آدرس Client ممکن است تحت Proxy، Gateway یا Connection Pool معنای متفاوت داشته باشد. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه CONNECTIONPROPERTY را پیش از ادامه منطق با شرط صریح کنترل کنید.
خطای 2 در استفاده از CONNECTIONPROPERTY
auth_scheme فقط برای اتصال جاری معتبر است. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه CONNECTIONPROPERTY را پیش از ادامه منطق با شرط صریح کنترل کنید.
خطای 3 در استفاده از CONNECTIONPROPERTY
اطلاعات شبکه را بدون ملاحظه امنیتی در لاگ عمومی منتشر نکنید. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه CONNECTIONPROPERTY را پیش از ادامه منطق با شرط صریح کنترل کنید.
ملاحظات Performance برای CONNECTIONPROPERTY
از نظر کارایی، CONNECTIONPROPERTY زمانی کمهزینه باقی میماند که روی یک مقدار هدفمند یا مجموعه محدود اجرا شود. فراخوانی آن روی هزاران ردیف بدون Predicate اولیه میتواند CPU و زمان گزارش را افزایش دهد.
اگر گزارش به چند Property از چندین شیء نیاز دارد، استفاده Set-based از کاتالوگویو یا DMV مرتبط با net_transport معمولاً بهتر از تکرار CONNECTIONPROPERTY برای هر سلول است.
در Jobهای دورهای، نتیجه CONNECTIONPROPERTY را همراه Timestamp ذخیره کنید، اما Frequency نمونهبرداری را متناسب با سرعت تغییر داده انتخاب کنید. جمعآوری بیش از حد، جدول تاریخچه را بدون ارزش تحلیلی بزرگ میکند.
برای محاسبات عددی پیرامون CONNECTIONPROPERTY، نوع داده را قبل از ضرب یا تفریق ارتقا دهید و در سناریوهای تجمعی، Restart و بازنشانی Baseline را در نظر بگیرید.
Best Practiceهای اختصاصی CONNECTIONPROPERTY
- ورودی CONNECTIONPROPERTY را از نام یا شناسه معتبر و دارای Schema یا Context روشن تأمین کنید.
- نتیجه NULL در CONNECTIONPROPERTY را از مقدار صفر، false یا رشته خالی جدا نگه دارید.
- نوع خروجی CONNECTIONPROPERTY را پیش از ذخیره یا مقایسه به نوع مقصد مناسب تبدیل کنید.
- در گزارشهای بزرگ، گزینه Set-based مرتبط با net_transport را ارزیابی کنید.
- زمان Capture، نام Database و در صورت نیاز @@SPID را کنار نتیجه CONNECTIONPROPERTY ثبت کنید.
- مجوز مشاهده Metadata یا DMV را با حداقل سطح دسترسی لازم تنظیم کنید. در مبحث CONNECTIONPROPERTY
- مثالهای CONNECTIONPROPERTY را روی نسخه و Edition واقعی محیط هدف آزمایش کنید.
- برای SQL پویا، خروجی نامی CONNECTIONPROPERTY را با QUOTENAME و پارامترسازی ایمن مصرف کنید.
تصویر سوم، تفاوت روش پرخطر و Best Practice در استفاده از CONNECTIONPROPERTY را مقایسه میکند؛ هدف آن جلوگیری از خطاهای مربوط به آدرس Client ممکن است تحت Proxy، Gateway یا Connection Pool معنای متفاوت داشته باشد. و بهبود تصمیمگیری فنی است.
سؤالات متداول اختصاصی CONNECTIONPROPERTY
CONNECTIONPROPERTY دقیقاً چه مسئلهای را در SQL Server حل میکند؟
تابع CONNECTIONPROPERTY اطلاعاتی درباره اتصال جاری مانند Transport، Protocol، Auth Scheme و آدرسهای شبکه میدهد. در عمل، برای عیبیابی TCP در برابر Shared Memory، بررسی Kerberos یا NTLM و ثبت منبع اتصال در گزارشهای امنیتی مفید است. بنابراین استفاده از CONNECTIONPROPERTY زمانی ارزشمند است که خروجی آن در یک تصمیم فنی روشن مصرف شود، نه اینکه فقط برای نمایش عدد یا نام به کار رود.
نوع خروجی CONNECTIONPROPERTY چیست و چگونه باید آن را مدیریت کرد؟
نوع خروجی این ابزار چنین است: sql_variant و برای Property نامعتبر یا ویژگی ناموجود مقدار NULL. بهتر است پیش از تبدیل نوع، مقایسه یا درج در جدول گزارش، حالت NULL و محدوده مقدار را صریح کنترل کنید تا رفتار CONNECTIONPROPERTY قابل پیشبینی بماند.
آیا CONNECTIONPROPERTY در گزارشهای سازمانی کاربرد تجاری دارد؟
بله. در سناریوهایی مانند تشخیص Kerberos و بررسی TCP Port، خروجی CONNECTIONPROPERTY میتواند کیفیت گزارش مدیریتی را بالا ببرد. ارزش تجاری زمانی ایجاد میشود که این داده به هشدار، ظرفیتسنجی یا کاهش زمان عیبیابی متصل شود.
استفاده از CONNECTIONPROPERTY در پروژههای بزرگ چه مزیتی دارد؟
در پروژه بزرگ، استانداردسازی نحوه استفاده از CONNECTIONPROPERTY باعث میشود تیم توسعه، DBA و پشتیبانی یک تعریف مشترک از net_transport و auth_scheme داشته باشند. این هماهنگی خطاهای تفسیر و دوبارهکاری را کاهش میدهد.
تفاوت CONNECTIONPROPERTY با گزینه نزدیک آن چیست؟
CONNECTIONPROPERTY اتصال جاری را توصیف میکند؛ sys.dm_exec_connections امکان مشاهده چند اتصال با مجوز کافی را فراهم میسازد. انتخاب صحیح باید بر اساس حجم داده، نیاز به خروجی Set-based و سطح جزئیات گزارش انجام شود؛ یک تابع scalar همیشه جایگزین کاتالوگویو یا DMV کامل نیست.
برای طراحی اسکریپت حرفهای مبتنی بر CONNECTIONPROPERTY چه خدماتی لازم میشود؟
در پروژههای حساس میتوان منطق CONNECTIONPROPERTY را در قالب رویه مانیتورینگ، Dashboard، گزارش زمانبندیشده یا کنترل Deployment پیاده کرد. تحلیل نیاز، تست روی نسخه واقعی SQL Server و مستندسازی خروجی، بخشهای مهم خدمات مشاوره و انجام پروژه هستند.
رایجترین خطا هنگام کار با CONNECTIONPROPERTY چیست؟
یکی از خطاهای مهم این است که آدرس Client ممکن است تحت Proxy، Gateway یا Connection Pool معنای متفاوت داشته باشد. همچنین نادیده گرفتن NULL یا Context اجرای Query میتواند نتیجهای ظاهراً معتبر ولی از نظر عملیاتی اشتباه تولید کند.
آیا فراخوانی زیاد CONNECTIONPROPERTY بر Performance اثر میگذارد؟
یک فراخوانی منفرد معمولاً سبک است، اما اجرای CONNECTIONPROPERTY روی مجموعه بسیار بزرگ یا در شرطی که برای هر ردیف محاسبه شود میتواند هزینه ایجاد کند. ابتدا ردیفها را محدود کنید و در گزارشهای وسیع، جایگزین Set-based را ارزیابی کنید.
بهترین روش استفاده از CONNECTIONPROPERTY چیست؟
بهترین روش این است که ورودی CONNECTIONPROPERTY اعتبارسنجی، نوع خروجی صریح، حالت NULL مدیریت و نتیجه همراه زمان و Context ثبت شود. همچنین باید مشخص باشد که خروجی برای نمایش، کنترل ایمنی یا تصمیم کارایی مصرف میشود.
CONNECTIONPROPERTY با کدام نسخههای SQL Server سازگار است؟
در نسخههای جدید SQL Server Propertyهای بیشتری اضافه شدهاند؛ برای سازگاری، NULL را مدیریت کنید. با این حال، هنگام انتقال اسکریپت به Azure SQL یا Edition دیگر، Propertyها، مجوزهای Metadata و تفاوتهای پلتفرم را روی همان محیط آزمایش کنید.
سؤالات مصاحبه درباره CONNECTIONPROPERTY
در مصاحبه چگونه تفاوت ورودی و خروجی CONNECTIONPROPERTY را توضیح میدهید؟
پاسخ مناسب باید Syntax یعنی CONNECTIONPROPERTY ( property )، نوع خروجی و شرایط NULL را توضیح دهد و یک نمونه از تشخیص Kerberos ارائه کند.
چه زمانی بهجای CONNECTIONPROPERTY از کاتالوگویو یا DMV استفاده میکنید؟
وقتی گزارش چندین ردیف و چند Property نیاز دارد، روش Set-based معمولاً مناسبتر است؛ CONNECTIONPROPERTY برای تبدیل یا بررسی هدفمند یک مقدار بسیار خواناست.
چگونه نتیجه نامعتبر CONNECTIONPROPERTY را از مقدار false یا صفر جدا میکنید؟
با بررسی صریح IS NULL، اعتبارسنجی ورودی و در صورت نیاز Join با Metadata منبع، علت نتیجه را روشن میکنم. این توضیح بهطور اختصاصی به CONNECTIONPROPERTY مربوط است.
چه نکته Performance درباره CONNECTIONPROPERTY مهم است؟
فراخوانی را پس از محدود کردن مجموعه داده انجام میدهم و از محاسبه تکراری CONNECTIONPROPERTY در SELECT و WHERE جلوگیری میکنم.
یک سناریوی واقعی برای CONNECTIONPROPERTY بیان کنید.
سناریوی مناسب میتواند عیبیابی Shared Memory باشد؛ در آن خروجی همراه Timestamp، نام Database و شناسه نشست ثبت میشود تا قابل پیگیری باشد.
چکلیست نهایی استفاده از CONNECTIONPROPERTY
- Syntax CONNECTIONPROPERTY و ورودیهای آن با نسخه هدف تطبیق داده شده است.
- Context پایگاه داده یا Instance برای CONNECTIONPROPERTY روشن است.
- مجوز لازم برای Metadata یا DMV بررسی شده است. در مبحث CONNECTIONPROPERTY
- NULL، مقدار نامعتبر و حالت مرزی CONNECTIONPROPERTY تست شده است.
- نمونه خروجی با نوع داده واقعی مقایسه شده است. در مبحث CONNECTIONPROPERTY
- در Query بزرگ، هزینه فراخوانی تکراری CONNECTIONPROPERTY اندازهگیری شده است.
- جایگزین Set-based برای گزارش انبوه ارزیابی شده است. در مبحث CONNECTIONPROPERTY
- نتیجه نهایی همراه Timestamp و توضیح عملیاتی ثبت میشود. در مبحث CONNECTIONPROPERTY
جمعبندی آموزش CONNECTIONPROPERTY
CONNECTIONPROPERTY ابزاری کوچک اما مؤثر برای برای عیبیابی TCP در برابر Shared Memory، بررسی Kerberos یا NTLM و ثبت منبع اتصال در گزارشهای امنیتی مفید است. است. استفاده حرفهای از آن به اعتبارسنجی ورودی، تفسیر نوع خروجی، کنترل NULL و انتخاب Scope مناسب وابسته است.
پس از تسلط بر CONNECTIONPROPERTY، برای مقایسه آن با سایر ابزارهای این مجموعه به مقاله مادر توابع کمکی Performance و Metadata در SQL Server بازگردید.
خدمات برنامهنویسی و پایگاه داده
برنامهنویسی در اصفهان
قبول سفارشهای برنامهنویسی و پایگاه داده: 09131253620
انجام پروژههای برنامهنویسی، آموزش برنامهنویسی و آموزش پایگاه داده SQL Server با رویکرد حرفهای، مستند و قابل توسعه انجام میشود.
مجموعهای معتبر با سابقه فعالیت حرفهای از سال ۱۳۷۵ شمسی
از سال ۱۳۷۵ شمسی تاکنون در زمینه طراحی و اجرای پروژههای برنامهنویسی، پایگاه داده، سیستمهای تحت وب، وبسایت و راهکارهای نرمافزاری فعالیت میکنیم.
برای سفارش پروژههای برنامهنویسی و پایگاه داده، سیستمهای تحت وب، وبسایت و راهکارهای نرمافزاری جدید، با شماره تلفن همراه 09131253620 تماس حاصل فرمایید.
ایتا، واتساپ و تماس مستقیم: +989131253620
تماس با ما