pirmdiena, 2012. gada 6. februāris

Datu bāzes Master Key (DMK)

Datu bāzes Master Key (Database Master Key, jeb DMK) ir simetriska atslēga, kas tiek izmantota, lai aizsargātu sertifikātu privātās atslēgas un asimetriskās atslēgas datu bāzē. Rakstā plašāk par DMK izveidi, rezerves kopiju veidošanu un atjaunošanu no rezerves kopijas.

Kas ir DMK
Kā jau sākumā minēju- DMK ir SQL Server ģenerēta simetriskā atslēga. Tā tiek glabāta šifrētā veidā. Ģenerējot DMK, tā tiek glabāta divās kopijās- (1) šifrēta izmantojot Servisa Master Key (SMK) un (2) šifrēta izmantojot lietotāja norādīto paroli. Veidojot DMK lietotājam obligāti ir jānorāda parole. DMK atslēgas šifrēšanai tiek izmantots Triple DES algoritms.

Iepriekšējā rindkopa varētu būt visai mulsinoša.. Citiem vārdiem sakot- datu bāzes Master Key ir atslēga, ko var ērti izmantot citu atslēgu šifrēšanai. Ja kāds aiznesīs jūsu datu bāzi uz citu serveri, tad visa ar DMK šifrētā informācija nebūs pieejama, jo tikai jūs zināt DMK paroli. Savukārt Servisa Master Key (otra atslēga, kas pēc noklusējuma šifrē DMK) tiek glabāta servera, nevis datu bāzes līmenī.

Svarīga, ka DMK pēc noklusējuma tiek šifrēta divos veidos- tiek glabāta tā pati atslēga šifrēta gan ar administratora norādītu paroli, gan ar SMK.
Bet:
- DMK var noņemt SMK šifrēšanu. Tādā gadījumā DMK var lietot tikai tad, ja to atver izmantojot paroli (pie šī vēl atgriezīšos raksta turpinājumā).
- DMK var tik šifrēta izmantojot dažādas paroles- tātad, DMK tiek glabāta vairākās kopijās- katra šifrēta ar citu paroli.

Izmantot vai neizmantot SMK priekš DMK šifrēšanas?
Tātad, DMK ir atslēga, kas tiek izmantota citu atslēgu šifrēšanai. Minētās "citas atslēgas" vienmēr var šifrēt arī izmantojot lietotāja norādītu paroli (nevis DMK). Jautājums patiesībā ir par to, kam jūs uzticat paroļu glabāšanu- SQL Serverim, vai lietotājiem (lietotājs var būt arī cita sistēma).
  • Ja jūs gribat, lai visa informācija tiktu aizsargāta ar parolēm, kas tiek glabāta uz lapiņas vai cilvēka galvā- tad DMK jums nav vajadzīga. Trūkums, protams, ir cilvēciskais faktors kā arī tas, cik droša ir ārējā sistēma un tīkls, pa kuru parolei jānokļūst līdz SQL Serverim.
  • Savukārt, ja jūs gribat, lai SQL Server būtu atbildīgs par drošu datu glabāšanu, tad DMK nodrošina ceļu, kā šifrēt ģenerētas atslēgas un kā tās aizsargāt no neautorizētas lietošanas. Šeit mīnuss ir tāds, ka datu bāzes administrators ir tiesīgs redzēt šifrēto informāciju. To var apiet izmantojot EKM (EKM ir ārpus šī raksta ietvariem).
    • Ja DMK tiek aizsargāts ar SMK, tad DMK lietošana citu atslēgu šifrēšanai ir automātiska- datu bāzes lietotājs, kam ir tiesības izmantot kādu atslēgu datu šifrēšanai vai atšifrēšanai, nemaz nezin, ka pati atslēga tiek šifrēta- tas to vienkārši lieto.
    • Ja DMK netiek aizsargāta ar SMK, bet gan ar paroli- tad citas atslēgas, kas ir šifrētas ar attiecīgo DMK var lietot tikai tad, ja DMK ir atvērta lietošanai (vēlāk skriptos piemēri kā to izdarīt).
    • Abos gadījumos, ja kāds aizstieps jūsu datu bāzi prom no servera- šifrētā informācija, kas aizsargāta ar DMK, būs pieejam tikai tad, ja būs pieja DMK- tas iespējams, ja zināma administratora parole vai pieejama SMK. 
Vēl- ja DMK tiek šifrēta izmantojot paroli un SMK tad atjaunojot datu bāzi no rezerves kopijas uz cita serverea (kam ir savādāka SMK), tad DMK automātiski netiks atvērta, jo SMK nevarēs to atšifrēt! Tas jāņem vērā. Ir divi risinājumi- atvērt DMK izmantojot paroli un pārģenerēt to (pēc pārģenerēšanas tā tiks aizsargāta ar jauno SMK. Pēc tam protams rezerves kopiju jāveido) vai otrs- panākt, lai SMK abos serveros būtu vienādas.
    DMK un TSQL
    Šajā sadaļā skripti darbībām ar DMK.
    Datu bāzes Master Key izveide (DMK uzreiz tiek aizsargāta divējādi- gan ar paroli, gan ar SMK):
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ManaLotiStipraParole';
    DMK rezerves kopijas veidošana ir pirmais uzdevums pēc DMK izveides (nākamais uzdevums būtu izveidoto rezerves kopiju noglabāt drošā vietā- piemēram, seifā):
    BACKUP MASTER KEY TO FILE = 'c:\Sertifikati\DMK_BackUp.key'
        ENCRYPTION BY PASSWORD = 'ParoleGlabasanaiUzDiska'
    DMK var noņemt SMK šifrēšanu- lai to izdarītu, ir jāizpilda sekojoša komanda:
    ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY
    Pēc šīs komandas izpildīšanas, DMK ir lietojama tikai gadījumā, ja tā ir atvērta. DMK atvēršana prasa Control tiesības datu bāzē (kas ir ļoti augstas tiesības). Bet to var eleganti risināt vairākos veidos (idejas var smelties Truncate Table tiesības):
    OPEN MASTER KEY DECRYPTION BY PASSWORD = 'mypassword'
    Atvērta DMK strādā sesijas ietvaros tik ilgi, kamēr tā tiek aizvērta. Aizvērt DMK var izpildot komandu (Aizvēršana, atšķirībā no atvēršanas, neprasa nekādas papildus tiesības):
    CLOSE MASTER KEY
    Atjaunot SMK šifrēšanu (ja DMK ir atvērta), var izpildot komandu:
    ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
    DMK vari pieviento vai noņemt papildus paroles (obligāti ir jāpaliek vismaz vienai no administatora parolēm):
    ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = 'mypassword2'
    ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = 'mypassword3'
    ALTER MASTER KEY DROP ENCRYPTION BY PASSWORD = 'mypassword2'
    ALTER MASTER KEY DROP ENCRYPTION BY PASSWORD = 'mypassword3'
    Atjaunot DMK no rezerves kopijas var šādi (ja DMK ir šifrēta ar SMK, tad pie DMK atjaunošanas no rezerves kopijas- visa ar esošo DMK šifrētā informācija tiek atšifrēta un nošifrēta pa jaunu. Ja esošā DMK nav šifrēta ar SMK, tad tā no sākuma ir jāatver- ja to nevar atvērt- tad informācija var pazust):
    RESTORE MASTER KEY FROM FILE = 'c:\Sertifikati\DMK_BackUp.key'
        DECRYPTION BY PASSWORD = 'ParoleGlabasanaiUzDiska'
        ENCRYPTION BY PASSWORD = 'mypassword';
    Pārģenerēt DMK var šādi (pēc pārģenerēšanas atkal der izveidot rezerves kopiju!):
    ALTER MASTER KEY
    REGENERATE WITH ENCRYPTION BY PASSWORD = 'JaunaParoleCitaiDMK'
    Vēlreiz gribētu uzsvērt, ka  DMK tiek pārģenerēta, ja izmanto iepriekšējo atslēgvārdu. Tātad- viss, kas ir šifrēts ar šo atslēgu tiek atšifrēts un nošifrēts no jauna ar pārģenerēto DMK. Tātad- ir nepieciešams izveidot rezerves kopiju pārģenerētajai DMK. Gadījumā, ja DMK ir "sabojāta" (vai, piemēram, pārģenerēta/izdzēsta izmantojot "FORCE" parametru), tad to joprojām var atjaunot no DMK rezerves kopijas.

    DMK informācijas apskatīšana
    Apskatīt vai DMK ir atvērta (un ne tikai DMK, bet arī citas datu bāzes atslēgas) var izmantojot skatu sys.openkeys, Ja DMK ir aizsargāta arī ar SMK, tad DMK tiek automātiski atvērta un aizvērta pie nepieciešamības:
    Select * From sys.openkeys
    Uzzināt visas datu bāzes simetriskās atslēgas (un tai skaitā- DMK) var izmantojot skatu sys.symmetric_keys:
    Select * From sys.symmetric_keys;
    Kā jau minēts iepriekš, DMK var tikt aizsargāta ar vairākām parolēm. SMK izmantošana DMK šifrēšanai nav obligāta (lai arī pēc noklusējuma DMK tiek šifrēta arī SMK). Apskatīt kā DMK ir šifrēt var izpildot vaicājumu skatam sys.key_encryptions- arī šajā gadījumā tas attiecas ne tikai uz DMK, bet arī uz citām atslēgām:
    Select sk.name, ke.crypt_type, ke.crypt_type_desc
    From sys.symmetric_keys sk
        Inner Join sys.key_encryptions ke on sk.symmetric_key_id = ke.key_id

    Nav komentāru:

    Ierakstīt komentāru