保護報表和資源的安全
您可以設定個別報表以及資源的安全性,來控制使用者必須對這些項目擁有的存取權程度。依預設,只有屬於管理員內建群組成員的使用者才可以執行報表、檢視資源、修改屬性及刪除項目。其他所有使用者都必須具有針對他們所建立的角色指派,好讓他們存取報表或資源。
以角色為基礎之報表和資源的存取
若要授與報表和資源的存取權,您可以讓使用者從父資料夾繼承現有的角色指派,或是在項目本身上建立新的角色指派。
在大多數情況下,您可能會想要使用從父資料夾繼承而來的權限。只有在您想要針對不需要知道報表或資源存在的使用者來隱藏報表或資源,或是要提高報表或項目的存取層級時,才應該需要對個別的報表和資源設定安全性。這些目標不會互斥。您可以將報表的存取權限制成較小組的使用者,然後提供全部或一部分使用者額外的權限來管理報表。
您可能需要建立多個角色指派來達成目標。例如,假設您有一份報表,要讓 Ann 與 Fernando 這兩位使用者,以及 Human Resource Managers 群組能夠存取。Ann 與 Fernando 必須能夠管理報表,但是 Human Resource Managers 成員只需要執行報表。為了配合所有這些使用者,您要建立三個不同的角色指派:一個讓 Ann 成為報表的內容管理員、一個讓 Fernando 成為報表的內容管理員、一個則支援 Human Resource Managers 群組的僅供檢視工作。
在報表或資源設定安全性之後,即使將項目移至新位置,這些設定值仍會保留在項目。例如,若您移動僅少數人擁有存取權的報表,即使將報表移至安全性原則較開放的資料夾,報表仍舊僅供這些使用者使用。
減少已發行報表或文件中的 HTML 資料隱碼攻擊
在 Reporting Services 中,會在執行報表之使用者的安全性識別之下處理報表和資源。如果報表包含運算式、指令碼、自訂報表項目或自訂組件,則程式碼會在該使用者認證之下執行。如果資源為包含指令碼的 HTML 文件,則當使用者在報表伺服器上開啟該文件時,將會執行該指令碼。在報表內執行指令碼或程式碼的能力是某些風險層級所隨附的一項強大功能;如果程式碼為惡意程式碼,則報表伺服器及執行報表的使用者很容易受到攻擊。
當您授與以 HTML 形式處理之報表和資源的存取權時,務必要記得報表是在完全信任的模式中處理,而且可能會將潛在的惡意指令碼傳送到用戶端。根據瀏覽器設定而定,用戶端將會在瀏覽器中指定的信任層級上執行 HTML。
您可以採取下列預防措施,以減少執行惡意指令碼的風險:
當您決定哪些人可以發行內容到報表伺服器時,要有選擇性;由於存在著發行惡意內容的可能性,所以應該將可以發行內容的使用者限制為少量的受信任使用者。
所有發行者都應該避免發行來自未知或未受信任之來源的報表和資源;必要時,請在文字編輯器中開啟檔案,並尋找可疑的指令碼和 URL。
減少參數化報表中的 SQL 資料隱碼攻擊
在任何含有 String 類型參數的報表中,請務必使用可用的值清單 (也稱為有效值清單),並且確認可執行報表的任一使用者只具有檢視報表資料的必要權限。當您將參數定義為 String 類型時,使用者會看到一個可接受任何值的文字方塊。可用的值清單會限制可輸入的值。如果報表參數繫結至查詢參數,而且您不要使用可用的值清單,則報表使用者可以在文字方塊中輸入 SQL 語法,如此可能會使您的報表及伺服器暴露在 SQL 資料隱碼攻擊的危險之下。如果使用者的權限足以執行新的 SQL 陳述式,伺服器可能會出現不良的結果。
如果報表參數未繫結至查詢參數,且參數值有包含在報表中,則報表使用者就可以在參數值中輸入運算式語法或 URL,並將報表轉譯為 Excel 或 HTML。如果另一個使用者接著檢視報表並按一下轉譯的參數內容,該使用者可能會不小心執行惡意指令碼或連結。
若要減輕不小心執行惡意指令碼的風險,請只從信任的來源開啟轉譯的報表。
[!附註]
在舊版的文件集中,有包含將動態查詢建立為運算式的範例;這種查詢類型會產生 SQL 資料隱碼攻擊的弱點,所以不建議使用。
保護機密報表的安全
包含機密資訊的報表應該在資料存取層級受到保護,方法是要求使用者提供存取敏感性資料的認證。如需詳細資訊,請參閱<指定報表資料來源的認證和連接資訊>。您也可以保護資料夾的安全,讓未經授權的使用者無法使用它。如需詳細資訊,請參閱<保護資料夾的安全>。