保護模型

在報表伺服器上使用報表模型,做為建立與使用特定報表的資料來源。您可以利用三種方式來保護報表模型:透過報表伺服器資料夾命名空間、透過模型項目安全性,以及透過資料庫安全性。

由於報表模型的安全性是多層的,因此可以檢視資料夾階層中之模型的使用者,可能會遇到其他限制,限制該模型於設計階段與執行階段的使用方式。使用模型做為報表資料來源的能力,取決於下列因素:

  • 模型上以角色為基礎的安全性 (亦即,在報表伺服器資料夾階層中檢視模型的能力)。

  • 報表上使用模型做為資料來源,以角色為基礎的安全性。如果使用者無法存取報表,他可能無法檢視模型所提供的資料 (在 Reporting Services 中,只能在報表中檢視模型內的資料;協力廠商應用程式可能會以其他方式公開模型資料)。

  • 模型內之項目上的安全性。

  • 檢視、資料表或資料行層級的資料庫安全性。

保護資料夾命名空間中的報表模型

您可以定義項目層級的角色指派,來決定使用者是否可以檢視或管理報表模型,這與所有儲存在報表伺服器上的項目一樣。

  • 擁有檢視模型之權限的使用者,可以在報表伺服器資料夾階層中看到模型,在 [一般] 屬性頁面中讀取有限數量的模型相關資訊 (例如,模型建立或修改的時間),並在使用模型做為資料來源的任何特定報表中的連結上按一下,以查詢模型。

  • 擁有管理模型之權限的使用者,可以刪除、重新命名以及更新模型。模型管理工作通常也需要發行新模型的能力,但是發行的能力實際上是透過資料夾的角色指派傳達,資料夾角色指派會決定使用者是否可以將項目加入至資料夾。

擁有檢視已發行模型之權限的使用者,不能直接開啟模型以檢視其內容,也不能將模型下載到檔案系統。執行階段時,與報表模型的所有互動都是透過使用模型的報表進行。

保護模型中的項目

模型項目安全性可以讓您控制對模型中特定部分的存取。若要設定模型項目安全性,請使用 SQL Server Management Studio。啟用模型項目安全性之後,您可以在模型命名空間中的特定節點上建立角色指派。如需詳細資訊,請參閱<模型項目安全性頁面 (報表管理員)>。

報表模型命名空間會以階層式結構呈現,其中包含根節點、實體、模型角色和欄位。它也包含了資料夾與檢視方塊,您可以使用這些來組織 (但是不保護) 模型項目。當您在 Management Studio 中檢視模型時,可以瀏覽階層式結構,並在不同的層級指定角色指派。您可以在報表模型的根節點上指定角色指派,以控制對整個模型的存取,或者在模型的各部分指定,以改變選取之分支上的存取權限。模型命名空間支援樹狀結構中較低層項目的繼承安全性,這與使用報表伺服器資料夾命名空間安全性一樣。

依預設,模型項目安全性為關閉。未啟用模型項目安全性時,檢視模型呈現之資料的所有權限,是透過報表伺服器資料夾階層中之模型與報表上的角色指派決定。

使用者看得到模型項目安全性。如果使用者沒有模型階層中特定分支的存取權,使用者在報表中就不會看到模型的該部分。它不能用於瀏覽資料,也不能傳回報表中的資料。使用模型項目安全性,報表伺服器會修改傳送至資料來源的查詢,以排除模型中超出使用者存取權限的任何部分。

透過資料庫安全性保護模型

資料庫安全性在模型驅動的報表中,提供第三層安全性。如果您限制對資料表或資料行的存取,資料庫就會針對所有未經授權的存取,傳回拒絕存取錯誤。如果您在模型中包含受到資料庫安全性規範的任何資料表或資料行,則在使用者存取對應到其無權檢視之資料表或資料行的模型項目時,會傳回資料庫錯誤訊息。雖然在某些狀況下,必須有資料表或資料行層級的資料庫安全性,不過務必要考慮它對特定報表導覽的影響。在導覽報表時收到資料庫錯誤訊息的使用者,必須追溯其步驟,以返回其擁有存取權的模型部分。

[!附註]

如果您依賴資料庫安全性,來保證只允許特定的使用者讀取特定的資料表或資料行值,請確定您設定資料來源使用 Windows 整合式安全性。

安全性實體模型項目

使用 Management Studio 來保護模型的下列部分:

  • 根節點

  • 資料夾

  • 實體

  • 模型角色 (「角色」一詞是指實體之間的關聯性)

  • 欄位

您不能保護整個檢視方塊,但是可以保護檢視方塊內的模型項目。安全性是根據模型項目的安全性繼承。例如,若只有管理員能在模型中存取模型項目,則當模型項目在檢視方塊中出現時,只有管理員能夠存取模型項目。

報表模型安全性與您為報表伺服器資料夾階層定義的安全性,以及在系統層級定義的安全性是分開的。模型的根節點並非透過資料夾階層存取或保護。

隱藏模型項目

除了透過角色指派限制存取之外,也可以使用隱藏屬性,以防止使用者看到模型的某些部分。如果您不希望任何使用者看到模型項目,請在模型設計師中,將項目的隱藏屬性變更為 True。隱藏項目並不會將其從模型計算或關聯性移除。例如,若您隱藏在運算式中使用的欄位,儘管使用者看不到它,不過運算式中仍會使用該欄位。隱藏項目會對所有使用者隱藏該項目。如果您要依使用者或群組改變可見性與存取權,請使用角色指派,而不要使用隱藏屬性來保護項目。

如何在報表模型中保護項目

您可以從報表管理員保護模型中的項目。若要保護模型項目,必須在報表伺服器上部署報表模型。

  1. 在報表管理員中,導覽到包含模型的資料夾。

  2. 將滑鼠停留在模型的名稱上,然後按一下箭頭以開啟功能表,並選取 [安全性]

  3. 在 [模型屬性] 頁面,按一下 [模型項目安全性]

  4. 選取 [獨立保護此模型的個別模型項目] 核取方塊。

  5. 選取根節點。根節點上需要角色指派。

  6. 按一下 [指派讀取權限給下列使用者和群組]

  7. 輸入使用者或群組的清單,並以分號 ';' 隔開。

  8. 按一下 [套用]

  9. 導覽至您要保護的下一個實體、關聯性、欄位或資料夾。重複步驟 6 至 8。