رفع خطای Direct Query با تعریف PBI_SQL_TRUSTED_SERVERS

در نسخه May 2024 منتشر شده برای Power BI Report Server یک تغییر امنیتی انجام شده است که توضیحات آن به نقل از خود مایکروسافت به شرح زیر می باشد:

توضیحات کامل این نسخه از آدرس زیر قابل مشاهده است:

Change log for Power BI Report Server – Power BI | Microsoft Learn

 

به علت تغییر مذکور، هنگام باز کردن داشبوردهایی که در گذشته Data Source آن ها به صورت Direct Query بوده است، با ارور زیر مواجه خواهید شد:

برای رفع این مشکل می بایست نسبت به تعریف System Variables در Machine مربوطه اقدام نمایید. برای این منظور لازم است به ترتیب زیرعمل نمایید:

۱-در جستجوی ویندوز، عبارت Edit the System Environment variables را جستجو و انتخاب نمایید سپس از پنجره باز شده که مطابق با تصویر زیر است، گزینه Environment Variables … را انتخاب نمایید:

سپس از پنجره باز شده، در قسمت System Variables گزینه New را انتخاب نمایید:

 

سپس مطابق با تصویر زیر برای Variable Name دقیقا مقدار “PBI_SQL_TRUSTED_SERVERS” را وارد نمایید. در قسمت Variable Value نیز می بایست Computer Name مربوط به Machine ای که روی آن Database Engine وجود دارد و Direct Query به یکی از دیتابیس های مربوط به آن متصل است را وارد نمایید.

سپس Machine مربوطه را Restart نمایید تا تغییرات انجام شده برای System Variable اعمال گردد. سپس با باز کردن مجدد داشبورد، ارور رفع گردیده و داشبورد مجدد قابل استفاده خواهد بود.

 

انجام مراحل فوق الذکر ساده است. اما هنگام تعریف New System Variable در وارد کردن Variable Value نکاتی وجود دارد که می بایست به آن ها دقت نمایید:

۱-در Report Server بر روی قسمت More Info داشبورد مربوطه کلیک نمایید و سپس گزینه Manage را انتخاب نمایید. سپس در بخش Data Sources به Connection String توجه نمایید:

هر اسمی که در اینجا وجود دارد (به عنوان مثال در تصویر فوق ComputerName1) می بایست هنگام تعریف System Variable نیز دقیقا همین نام را برای Variable Value وارد نمایید. در غیر این صورت خطای داشبورد رفع نخواهد شد.

فرض کنید Connection String در تصویر بالا به جای “ComputerName1;DatabaseName” به صورت “.;DatabaseName” ثبت شده باشد.  با این پیش فرض که ComputerName1 همان سرور Local می باشد، عبارت “.” نیز معادل همان “ComputerName1” می باشد. حال به دلیل اینکه در Connection String عبارت “.;DatabaseName” ثبت شده است، در صورتی که Variable Value را برابر با “ComputerName1” وارد کرده باشید، مجدد در داشبورد با ارور مواجه خواهید شد. برای رفع این مشکل می بایست هنگام تعریف System Variable در قسمت Variable Value مقدار “.” را مطابق با تصویر زیر وارد نمایید:

پس از Restart مجدد Machine خواهید دید که مشکل رفع می شود و داشبورد بدون خطا باز خواهد شد.

در نتیجه همیشه می بایست Variable Value را بر اساس Connection String داشبوردهایی که با Direct Query ساخته اید وارد نمایید. برای ساده تر شدن کار می توانید هر دوی “.” و “ComputerName1” را در Variable Value وارد نمایید. دقت نمایید دو مقدار می بایست با “,” از هم جدا شوند. مطابق با تصویر زیر که مقدار “.,ComputerName1” در Variable Value قرار داده شده است.

راهکار دیگر این است که Connection String تمامی داشبوردهای خود را بر اساس ComputerName تغییر دهید. با این کار تنها با وارد کردن ComputerName می توانید ارور مربوطه را رفع نمایید.

۲-چالش دیگری که با آن مواجه می شوید این است که ممکن است داشبوردهای مختلف به Database های مختلف که در Server های مختلفی قرار دارند متصل باشند. فرض کنید ۳ داشبورد داشته باشید که یکی از آن ها به سرور ComputerName1 و دیگری به ComputerName2 و دیگری به سروری به نام ComputerName3 متصل است. در این حالت می بایست همه موارد خود را مشابه با مورد قبل در Variable Value با استفاده از کاما تعریف نمایید:

سپس با Restart کردن Machine تغییرات اعمال خواهد شد.

بدیهی است در صورتی که در Connection String داشبورد به جای ComputerName، آی پی مربوط به سرور ثبت شده باشد، باید در Variable Value مشابه با موارد قبل، IP مربوطه را اضافه نمایید تا خطای داشبورد رفع گردد.

 

برای جمع بندی، توجه به چند نکته زیر در انجام این تغییرات ضروری است:

۱-برای اعمال شدن سراسری تغییرات، حتما Vairable را در قسمت System Variable تعریف نمایید.

۲-برای Variable Name حتما عبارت “PBI_SQL_TRUSTED_SERVERS” را قرار دهید.

۳-برای Variable Value باید تمامی مقادیری که در Connection String داشبوردها در Report Server وجود دارد را وارد نمایید. یا می توانید Connection String های داشبوردها را ادیت نمایید تا همگی به صورت یکپارچه بر اساس ComputerName یا IP و … باشند.

۴-برای وارد کردن چندین Value در قسمت Variable Value حتما از “,” به عنوان جدا کننده استفاده نمایید. استفاده از “;” منجر به بروز خطا می گردد.

۵-پس از اتمام تغییرات مربوط به ایجاد System Variable حتما Machine مربوطه را Restart نمایید.