通用資料級許可權控制解決方案的實現 一 轉)

2022-02-05 10:10:13 字數 2416 閱讀 7090

bi資料分析是目前企業的熱門應用,而對企業來說,進行許可權控制是必須而且非常重要的,尤其是作為決策用的企業報表。在bi解決方案中,許可權控制又分為2種:一種是報表級許可權控制,這型別許可權控制沒有什麼好講的,報表系統都本身就支援了。另一種比較複雜的就是資料級許可權控制,所謂的資料級許可權控制,就是使用者只能看自己許可權範圍內的資料以及這些資料的統計結果。比如乙個大型公司的華南區銷售主管就不能看到華北區的銷售資料和統計結果;雖然華南區主管和華北區主管都是瀏覽同一張銷售報表,但是該報表上出來的資料結果卻不一樣。

在這個系列裡,我將講述下基於微軟的ssas來實現通用的資料級許可權控制解決方案。而ssrs不會在本文中涉及,因為ssrs是進行報表級許可權控制的,與資料級許可權的控制並沒有關係。其實有資料級許可權控制支援的報表,其報表級許可權控制甚至都可以不需要,因為沒有許可權的使用者看到的只是一片資料上的空白;當然了,從實際角度出發,還是需要做好報表級許可權控制的。

基於sql server的bi解決方案中,資料級許可權的控制會涉及如下內容:

在ssas的cube中設定需要對哪些維度進行資料級許可權控制

提供給使用者乙個介面友好的控制台,讓使用者能夠非常方便的做資料級許可權控制的配置。

為了更好的講述資料級許可權控制的效果,我們以乙個例項來說明。在我們的cube中有乙個維度是"區域-城市-辦公室",我們主要是控制該維度的資料級許可權。區域分為:華南區、華北區、華東區、西南區、東北區;在效果上主要看對區域進行資料許可權控制下的報表結果。

明白了我們的任務,首先開始的是如何在ssas的cube中作設定,讓其支援我們的資料級許可權控制。這個設定分為2部分:

通過ssas的自定義dll來讀取使用者的許可權設定,如果是我們的示例,就是讀取使用者是哪個區域的。

建立乙個新的角色,設定該角色的維度資料的自定義允許的結果集。

第一步是開發乙個.net 類庫,並且把這個類庫部署到ssas中,準備提供給第二步的設定中使用。其實這個類庫的**比較簡單,一般都不會超過50行。我們來看看**和簡單的說明:

public

class

datasecurity

";//domain_account:瀏覽報表的使用者域帳號

//dimension:要查詢的維度,實際為維度的attribute

public

static

string getdimensionset(string domain_account, string dimension, string

unique_name)

sqlconnection connection = new

sqlconnection(connection_string);

connection.open();

sqlcommand command = new sqlcommand("

getdimensionset

", connection);

command.commandtype =system.data.commandtype.storedprocedure;

sqlparameter p1 = new sqlparameter("

@domain_account

", domain_account);

sqlparameter p2 = new sqlparameter("

@dimension

", dimension);

command.parameters.add(p1);

command.parameters.add(p2);

sqldatareader reader =command.executereader();

string result_set = string

.empty;

int count = 0

;

while

(reader.read())

command.dispose();

connection.close();

connection.dispose();

if (count == 0

) ";

}return""

; }

public

datasecurity()

}

view code

我們把這個生成的dll命名為:bidatasecurity.dll

接下來,就需要將這個dll放到ssas中以供後面的維度資料中的設定呼叫。

開啟ssas,點選如下圖所示的"new assembly...",然後在開啟的視窗中,把上面的這個bidatasecurity.dll傳到ssas中。

完成以後,我們就完成了第一步,設定好了cube的自定義dll,第二步中將呼叫這個介面來獲取使用者的授權資料。

字串的多國語言支援解決方案 通用解決方案篇

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!write by 九天雁翎 jtianling blog.jtianling.com 討論新聞組 庫 豆瓣 在用qt的時候,自然是使用qt的解決方案,簡單易用,參考 字串的多國語言支援解決方案 qt篇 在不需要跨平台開發iphone的應用時,自然使...

海量資料的解決方案

現在無論是企業的業務系統還是網際網路上的 程式都面臨著資料量大的問題,這個問題如果解決不好將嚴重影響系統的執行的速度。1 快取和頁面靜態化 資料量大的問題最直接的解決方案就是使用快取,快取就是將從資料庫中獲取的結果佔時儲存起來,在下次使用的時候無需要重新到資料中獲取,這樣可以大大降低資料庫的壓力。快...

海量資料的解決方案

隨著企業業務的不斷擴充套件,不得不面臨資料量大的問題,下面針對這個問題進行各種方案的介紹。快取的使用方式分為通過程式儲存到記憶體中和使用快取框架兩種方式。程式直接操作的是 map,尤其是concurrentmap,而常用的快取框架有 ehcache memcache 和 redis等。頁面靜態化是將...