جستجوی متن کامل پشتیبانی نمی شود. اگر بخواهید یک فهرست کامل متن ایجاد کنید، با خطایی مانند زیر مواجه خواهید شد: ستون 'col' نمی تواند برای جستجوی متن کامل استفاده شود زیرا یک ستون مبتنی بر کاراکتر، XML، تصویر یا varbinary (max) نیست یا رمزگذاری شده است.(Microsoft SQL Server، خطا: 7670)
- (از طرف دیگر، Change Tracking با Always Encrypted به خوبی کار می کند. من معتقدم این به این دلیل است که فقط مقادیر کلیدی ثبت می شوند، بنابراین طبق تعریف تاریخچه هرگز نمی تواند شامل ستون های رمزگذاری شده باشد.)
عملیات
ستون هایی که از رمزگذاری قطعی استفاده می کنند، از مقایسه برابری WHERE و همچنین DISTINCT، JOIN و GROUP BY پشتیبانی می کنند. شما نمی توانید نابرابری، محدوده، یا پرس و جوهای LIKE یا هر عملیات دیگری را در برابر ستون های رمزگذاری شده (عملیات حسابی، تاریخ/زمان، و غیره) انجام دهید:
شاخص ها / محدودیت ها
شما نمی توانید یک فهرست یا محدودیت در ستونی ایجاد کنید که از رمزگذاری تصادفی استفاده می کند:
و کلیدهای خارجی باید با انواع رمزگذاری مطابقت داشته باشند:
کد مشتری
کتابخانه های مشتری باید برای پشتیبانی از رمزگذاری و رمزگشایی ستون ها و پارامترها به روز شوند. همه درایورها از این عملکرد پشتیبانی نمی کنند و برخی ممکن است هرگز. در حال حاضر تنها فناوری که از این پشتیبانی می کند .net 4. 6 است. به روزرسانی های ODBC و JDBC باید به زودی ارائه شوند.
رشته اتصال باید با ویژگی اضافی زیر به روز شود:
خود استودیو مدیریت از هر مشتری می خواهد که یک کپی از کلید رمزگذاری ستون یا دسترسی مستقیم به آن داشته باشد. من در یک پست آینده به سناریوی مفصل تری خواهم پرداخت، اما در حال حاضر می توانید فرض کنید که باید به کاربران برنامه (از جمله SSMS) توانایی دیدن ابرداده کلید اصلی/ستونی را با کد زیر اعطا کنید:
تا زمانی که تنظیمات رمزگذاری ستون به عنوان یک پارامتر اتصال اضافی اضافه شود ، کاربران SSMS قادر خواهند بود مقادیر رمزگشایی شده را در نتیجه یک پرس و جو مشاهده کنند. اما آنها نمی توانند پارامترهایی را به یک روش ذخیره شده منتقل کنند که مقادیر رمزگذاری شده را درج یا به روزرسانی می کند ، زیرا - بر خلاف یک برنامه ، که رمزگذاری را انجام می دهد - بین اعلام پارامترها و انتقال آنها به روش ذخیره شده ، هیچ سفر دور وجود ندارد. نتیجه:
ممکن است راهی برای کار در این زمینه با استفاده از حالت SQLCMD وجود داشته باشد ، اما من هنوز خیلی عمیقاً کاوش نکرده ام.
برای برنامه های مشتری در دستگاه های غیر از جایی که SQL Server 2016 نصب شده است ، آنها به یک نسخه به روز شده از .net Framework (در ویندوز 10 لازم نیست یا اگر Visual Studio 2015 لازم نیست) و گواهی نصب شده (همانطور که در اینجا شرح می دهم ، نیاز دارند.). اگر چارچوب به اندازه کافی مدرن نباشد ، تنظیم رشته اتصال به سادگی کار نمی کند (اگرچه من پیام خطای دقیق را تأیید نکرده ام زیرا تمام VM های من SQL Server 2016 Windows 10 هستند). اگر گواهی مورد استفاده برای کلیدها در آنجا نباشد ، بسته به نوع کلیدهایی که در سرور پایگاه داده ایجاد کرده اید ، برنامه با خطاهایی مانند این خراب می شود:
(این می داند که کجا می توانید آن گواهی را در دستگاه محلی جستجو کنید زیرا این ابرداده را از SQL Server دریافت می کند. برای برخی از اطلاعات دیگر در مورد کلیدهای اصلی/ستون و به ویژه در مورد چرخش کلید ، به این پست وبلاگ امنیتی SQL Server مراجعه کنید.)
پارامترهای رمزگذاری شده باید به عنوان پارامترهای تایپ شده به درستی منتقل شوند. این نوع ad hoc sql شکسته می شود ، حتی اگر از برنامه C# 4. 6 شما با تنظیم رمزگذاری ستون مناسب در رشته اتصال منتقل شود:
برای انجام هر یک از عملیات پشتیبانی شده در برابر ستون های رمزگذاری شده ، باید از SQLCommand و SQLParameter استفاده کنید.
سرانجام ، سربار اضافی لازم برای مذاکره در مورد دست های رمزگذاری وجود دارد ، بنابراین اگر برنامه شما واقعاً چرب است ، مطمئناً می خواهید عملکرد شبکه خود را پایه گذاری کنید و پس از رمزگذاری ستون های خود مقایسه کنید. همچنین این نکته وجود دارد که داده های رمزگذاری شده می توانند فضای بیشتری را نسبت به معادل رمزگذاری نشده خود ، چه از فشرده سازی استفاده کنید یا خیر ، به خود اختصاص دهند. من به عنوان یک همراه با این پست ، نگاهی به این دو تأثیر در یک پست جداگانه در SQLPerformance.com انداختم.
برخی از ملاحظات اضافی برای توسعه کد مشتری وجود دارد ، و یک موضوع اختصاصی در مورد آن در کتاب های آنلاین وجود دارد.
با وجود همه نقض داده های این روزها ، من کاملاً خوشحالم که پیشرفت هایی در محافظت از داده ها وجود دارد. اما درک محدودیت ها قبل از پرش به آن می تواند یک تمرین یادگیری ارزشمند باشد. من تکرار می کنم ، زیرا به اندازه کافی نمی توان تأکید کرد ، که این محدودیت هایی است که من در ساخت های فعلی امروز مشاهده می کنم و وضعیت هر یک از این موضوعات می تواند در هر زمان تغییر کند. من همچنین اعتراف می کنم که این لزوماً از نظر ویژگی ها یک لیست جامع نیست. فقط آنهایی که فکر می کردم واضح ترین آنها را بررسی کنم.
برای پست های بیشتر در مورد رمزگذاری و سرور SQL ، برچسب هش #TSQL2SDay و پست کن را دنبال کنید.

هارون برتراند
Aaron (Aaronbertrand) یک پلت فرم داده MVP با تجربه صنعت است که قدمت آن به ASP Classic و SQL Server 6. 5 باز می گردد. او سردبیر وبلاگ مربوط به عملکرد ، sqlperformance.com است. وبلاگ هارون بر روی عادات بد T-SQL و بهترین شیوه ها و همچنین پوشش به روزرسانی ها و ویژگی های جدید در Plan Explorer ، Sentryone و SQL Server تمرکز دارد.< Span> با تمام نقض داده های این روزها ، من کاملاً خوشحالم که پیشرفت هایی در محافظت از داده ها وجود دارد. اما درک محدودیت ها قبل از پرش به آن می تواند یک تمرین یادگیری ارزشمند باشد. من تکرار می کنم ، زیرا به اندازه کافی نمی توان تأکید کرد ، که این محدودیت هایی است که من در ساخت های فعلی امروز مشاهده می کنم و وضعیت هر یک از این موضوعات می تواند در هر زمان تغییر کند. من همچنین اعتراف می کنم که این لزوماً از نظر ویژگی ها یک لیست جامع نیست. فقط آنهایی که فکر می کردم واضح ترین آنها را بررسی کنم.