Občas sa stane, že potrebujeme aby užívatelia mali prístup k nejakým dátam, no zároveň chceme zabrániť tomu, aby ich šírili ďalej. To samozrejme úplne riešiť nejde (ťažko totiž niekomu zabrániť, aby si vzal k počítaču foťák, otvoril si dané údaje a urobil fotku), je však možné ošetriť to pre menej kreatívnych užívateľov a tým kreatívnym aspoň skomplikovať situáciu. Ďalší text sa týka len zabezpečenia v rámci Lotus Notes klienta

Najskôr malé zhrnutie, ako je možné z databázy dostať dáta štandardnými spôsobmi:

1. Kópia / replika celej databázy

3. Kopírovanie dokumentov – Ctrl + C, Ctrl + V

4. Export – buď pohľadu, alebo nejakého konkrétneho dokumentu

5. Tlač

6. Screenshot

Kópia / replika celej databázy

S týmto nám pomôže ACL, konkrétne možnosť “Replicate or copy documents”, ktorá sa dá nastaviť u užívateľov od Depositora až po Managera. Ak daný užívateľ túto voľbu v ACL nemá zapnutú, každý pokus o vytvorenie kópie alebo repliky skončí chybovou hláškou “You are not authorized to perform this operation.”. Toto nastavenie zabráni aj kopírovaniu dokumentov pomocou Ctrl+C, Ctrl+V.

Kopírovanie dokumentov, exporty, tlač

Druhý spôsob ako zabrániť kopírovaniu dokumentov, je nenápadný checkbox na poslednej záložke nastavenia formulára.

Nastavenie

Dokumenty vytvorené pomocou formulára s takýmto nastavením majú automaticky vytvorené pole s názvom $KeepPrivate a hodnotou 1. Takéto dokumenty nie je možné vytlačiť, kopírovať ani exportovať nezávisle na právach pridelených v ACL. Po menšom testovaní som ale zistil, že toto nastavenie má 2 nedostatky.

Dokumenty označené $KeepPrivate je možné vytlačiť v pohľade voľbou Print selected view. Ďalším nedostatkom je, že toto pole je možné zmazať napr. agentom, alebo magickým tlačítkom. Vyjadrenie IBM je, že sa nejedná o “security feature”, takže to nie je vhodné na zabezpečenie, každopádne je dobré vedieť, že niečo také existuje.

Takto zabezpečené je možné odosielať aj maily, stačí v Delivery options zapnúť Prevent copying.

Screenshot-Delivery Options

Screenshot

Užívateľom s operačným systémom Windows je možné zakázať vytváranie screenshotov pomocou nasledujúceho kódu v LotusScripte. Autorom je  Charles Robinson a viac informácií sa je možné dozvedieť v jeho článku (v angličtine).

Napr. ak nechceme aby užívatelia vytvárali screenshoty v nejakom pohľade, pridáme do Declarations pohľadu tento kód.

Declare Function FindWindowByClass Lib "user32" Alias "FindWindowA" (Byval lpClassName As String, Byval lpWindowName As Long) As Long
Declare Function GetTickCount Lib "kernel32" () As Long
Declare Function RegisterHotKey Lib "user32" (Byval hWnd As Long, Byval id As Long, Byval fsModifiers As Long, Byval vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (Byval hWnd As Long, Byval id As Long) As Long
Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (Byval lpString As String) As Long
Declare Function GlobalDeleteAtom Lib "kernel32"   (Byval nAtom As Long) As Long
Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long
 
Const VK_SNAPSHOT = &H2C
 
Const  MOD_ALT = &H1
Const  MOD_CONTROL = &H2
Const  MOD_SHIFT = &H4
 
Dim g_hWnd As Long
Dim g_Print As Long
Dim g_AltPrint As Long
Dim g_CtrlPrint As Long
Dim g_ShiftPrint As Long

Do QueryOpen:

'Get a handle to the Notes client window so you can tell Windows which window to hook the hotkeys to
g_hWnd = FindWindowByClass("Notes", 0)
 
'Register new identifiers for our custom hotkeys.  GetTickCount returns a number that's based on the system clock,
'     so you know it won't be duplicated.
g_Print = GlobalAddAtom(Cstr(GetTickCount))
g_AltPrint = GlobalAddAtom(Cstr(g_Print) + Cstr(GetTickCount))
g_CtrlPrint = GlobalAddAtom(Cstr(g_AltPrint) + Cstr(GetTickCount))
g_ShiftPrint = GlobalAddAtom(Cstr(g_CtrlPrint) + Cstr(GetTickCount))
 
'Now register the hotkeys
Call RegisterHotKey(g_hWnd, g_Print, 0&, VK_SNAPSHOT) 'PrintScreen
Call RegisterHotKey(g_hWnd, g_AltPrint, MOD_ALT, VK_SNAPSHOT) 'Alt+PrintScreen
Call RegisterHotKey(g_hWnd, g_CtrlPrint, MOD_CONTROL, VK_SNAPSHOT) 'Ctrl+PrintScreen
Call RegisterHotKey(g_hWnd, g_ShiftPrint, MOD_SHIFT, VK_SNAPSHOT) 'Shift+PrintScreen

A do QueryClose:

Call UnregisterHotKey(g_hWnd, g_Print)
Call UnregisterHotKey(g_hWnd, g_AltPrint)
Call UnregisterHotKey(g_hWnd, g_CtrlPrint)
Call UnregisterHotKey(g_hWnd, g_ShiftPrint)
 
'Delete our custom entries
Call GlobalDeleteAtom(g_Print)
Call GlobalDeleteAtom(g_AltPrint)
Call GlobalDeleteAtom(g_CtrlPrint)
Call GlobalDeleteAtom(g_ShiftPrint)

Hlavnou nevýhodou tohoto prístupu je, že vytváranie screenshotov je vypnuté pre celý systém až do zavolania kódu ktorý je v predchádzajúcom príklade v QueryClose, čo môže niektorých užívateľov trochu zmiasť. Ďalej tento kód funguje na princípre preregistrovania klávesových skratiek, čo znamená, že bude stále možné vytvárať screenshoty rôznymi utilitami.

Ak by ste vedeli o nejakej ďalšej technike, ktorú som v článku nespomínal, podeľte sa o ňu pomocou komentáru a ja článok rád rozšírim.