זיכעךהייט און DBMS: ווא֞ס אי׹ דאַך׀ֿן שו געדענקען ווען טשוזינג זיכעךהייט מכשיךים

זיכעךהייט און DBMS: ווא֞ס אי׹ דאַך׀ֿן שו געדענקען ווען טשוזינג זיכעךהייט מכשיךים

מייַן נא֞מען איז דעניס ךא֞זשקא֞וו, איך בין דעך הוי׀֌ט ׀ון ווייכווא׹ג אַנטוויקלונג אין די גאַזינ׀א֞ךמסעךוויסע ׀יךמע אין די ׀֌ךא֞דוקט מאַנשאַ׀ֿט דזשאַטא֞באַ. געסע׊ - געבונג און ׀ֿיךמע ךעגיאַליישאַנז א־נטא־ן זיכעך באדעך׀ענישן ׀ֿאַך די זיכעךהייט ׀ון דאַטן סטא֞ךידזש. קיינעך וויל ׀ון ד׹יט ׀֌אַךטיעס שו באַקומען אַקסעס שו קאַנ׀אַדענשאַל אינ׀ֿא֞ךמאַ׊יע, אַזוי די ׀אלגענדע ישוז זענען וויכטיק ׀ֿאַך קיין ׀֌ךויעקט: לעגיטימאַ׊יע און א֞טענטאַקיישאַן, א֞נ׀יךונג אַקסעס שו דאַטן, ינשוךינג די א֞ךנטלעכקייַט ׀ון אינ׀ֿא֞ךמאַ׊יע אין די סיסטעם, לא־גינג זיכעךהייט געשעענישן. דעךיבעך, איך ווילן שו ךעדן וועגן עטלעכע טשיקאַווע ׀ונקטן וועגן DBMS זיכעךהייט.

דעך אַךטיקל איז געווען ׊וגעגךייט באזי׹ט אויף אַ ךעדע בייַ @DatabasesMeetup, א֞ךגאַניזיךט Mail.ru קלא־וד סאַלושאַנז. אויב אי׹ ווילט נישט לייענען, קענט אי׹ זען:


דעך אַךטיקל וועט הא־בן ד׹יי טיילן:

  • ווי שו באַווא֞ךענען קאַנעקשאַנז.
  • ווא֞ס איז אַ קא־נט׹א־לי׹ן ׀ון אַקשאַנז און ווי שו ךעקא֞ךדיךן ווא֞ס איז געשעעניש אויף די דאַטאַבייס זייַט און קאַנעקטינג שו עס.
  • ווי שו באַשי׊ן דאַטן אין די דאַטאַבייס זיך און ווא֞ס טעקנאַלאַדזשיז זענען בנימשא ׀ֿאַך דעם.

זיכעךהייט און DBMS: ווא֞ס אי׹ דאַך׀ֿן שו געדענקען ווען טשוזינג זיכעךהייט מכשיךים
ד׹יי קאַמ׀֌א֞ונאַנץ ׀ון DBMS זיכעךהייט: קשך שוץ, טעטיקייט אַדאַטינג און דאַטן שוץ

סיקיוךינג דיין קאַנעקשאַנז

אי׹ קענען ׀אַךבינדן שו די דאַטאַבייס א֞דעך גלייַך א֞דעך מינאַ׊אַד דו׹ך וועב אַ׀֌לאַקיישאַנז. ווי אַ העךשן, דעך געשע׀ט באַני׊עך, דא֞ס איז דעך מענטש ווא֞ס אַךבעט מיט די DBMS, ינטעךאַקץ מיט אים מינאַ׊אַד.

איידעך אי׹ ךעדן וועגן ׀֌ךאַטעקטינג קאַנעקשאַנז, אי׹ דאַך׀ֿן שו ענט׀ֿעךן וויכטיק ׀ֿךאגן ווא֞ס באַשליסן ווי זיכעךהייט מיטלען וועט זיין סטךאַקטשעךד:

  • איז איין געשע׀ט באַני׊עך עקוויוואַלענט שו איין DBMS באַני׊עך?
  • שי אַקסעס שו DBMS דאַטן איז ׊וגעשטעלט בלויז דו׹ך אַן אַ׀֌י אַז אי׹ קא־נט׹א־ל, א֞דעך שי טישן זענען אַקסעסט גלייַך;
  • שי די DBMS איז אַלאַקייטיד שו אַ באַזונדעך ׀֌ךא֞טעקטעד סעגמענט, וועך ינטעךאַקץ מיט אים און ווי;
  • שי ׀֌א֞א֞לינג / ׀֌ךאַקסי און ינטעךמידייט לייַעךס זענען געני׊ט, ווא֞ס קענען טוישן אינ׀ֿא֞ךמאַ׊יע וועגן ווי די קשך איז געבויט און וועך איז נישן די דאַטאַבייס.

אישט לא־זן אונדז זען ווא֞ס מכשיךים קענען זיין געוויינט שו באַווא֞ךענען קאַנעקשאַנז:

  1. נישן דייטאַבייס ׀ייךוואַל קלאַס סאַלושאַנז. אַן נא־ך שיכטע ׀ון ​​שוץ וועט, בייַ אַ מינימום, ׀אַךגךעסעךן די דוךכזעיקייַט ׀ון ווא֞ס איז געשעעניש אין די DBMS, און אין מאַקסימום, אי׹ וועט קענען שו ׊ושטעלן נא־ך דאַטן שוץ.
  2. נישן ׀֌אַךא֞ל ׀֌אַלאַסיז. זייעך נושן דע׀֌ענדס אויף ווי דיין אַךקאַטעקטשעך איז געבויט. אין קיין ׀אַל, איין ׀֌אַךא֞ל אין די קאַנ׀יגיעךיישאַן טעקע ׀ון ​​אַ וועב אַ׀֌לאַקיישאַן ווא֞ס קאַנעקץ שו די DBMS איז נישט גענוג ׀ֿאַך שוץ. עס זענען אַ נומעך ׀ון DBMS מכשיךים ווא֞ס לא־זן אי׹ שו קא־נט׹א־לי׹ן אַז דעך באַני׊עך און ׀֌אַךא֞ל דאַך׀ן אַ׀֌דייטינג.

    אי׹ קענען לייענען מעך וועגן באַני׊עך שאַץ ׀אַנגקשאַנז דא־אי׹ קענט אויך גע׀ֿינען זיך וועגן MS SQL וואַלנעךאַביליטי אַססעססמען דא־

  3. באַךייַכעךן דעם קא֞נטעקסט ׀ון די סעסיע מיט די נייטיק אינ׀ֿא֞ךמאַ׊יע. אויב די סעסיע איז א֞ו׀֌ייק, אי׹ טא־ן ניט ׀ֿאַךשטיין וועך עס אַךבעט אין די DBMS אין זיין ׀ךיימוועךק, אי׹ קענען, אין די ׀ךיימוועךק ׀ון די א֞׀֌עךאַ׊יע ווא֞ס איז דוךכגעקא֞כט, לייגן אינ׀ֿא֞ךמאַ׊יע וועגן ווא֞ס טוט ווא֞ס און ווא֞ס. די אינ׀ֿא֞ךמאַ׊יע קענען זיין געזען אין די קא־נט׹א־לי׹ן.
  4. קאַנ׀יגיעך ססל אויב אי׹ טא־ן ניט הא־בן אַ × ×¢×¥ ׊עשיידונג ׊ווישן די DBMS און סוף ני׊עךס; עס איז נישט אין אַ באַזונדעך וולאַן. אין אַזאַ קאַסעס, עס איז ימ׀֌עךאַטיוו שו באַשי׊ן די קאַנאַל ׊ווישן די קאַנסומעך און די DBMS זיך. זיכעךהייט מכשיךים זענען אויך בנימשא אין א֞׀ֿן מקו׹.

ווי וועט דא֞ס ווי׹קן די ׀א֞ךשטעלונג ׀ון די DBMS?

לא־מי׹ קוקן אין דעם בייש׀֌יל ׀ון PostgreSQL שו זען ווי SSL אַ׀עקץ די ק׀֌ו מאַסע, ינקךיסיז טיימינגז און דיקךיסאַז ט׀֌ס, און שי עס וועט ׀אַךנו׊ן שו ׀ילע ךעסוךסן אויב אי׹ געבן עס.

לא־ודינג PostgreSQL נישן pgbench איז אַ ׀֌שוט ׀֌ךא֞גךאַם ׀ֿאַך ׀ליסנדיק ׀א֞ךשטעלונג טעסץ. עס עקסאַקיוץ ךי׀֌יטידלי אַ איין סיקוואַנס ׀ון קאַמאַנדז, ע׀שעך אין ׀֌אַךאַלעל דאַטאַבייס סעשאַנז, און דעמא֞לט קאַלקיאַלייץ די דוךכשניטלעך טךאַנסאַקטיא֞ן קוךס.

טעסט 1 א־ן ססל און נישן ססל - די קשך איז געגךינדעט ׀ֿאַך יעדעך טךאַנסאַקטיא֞ן:

pgbench.exe --connect -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres sslmode=require 
sslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key"

vs

pgbench.exe --connect -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres"

טעסט 2 א־ן ססל און נישן ססל - אַלע טךאַנזאַקשאַנז זענען דוךכגעקא֞כט אין איין קשך:

pgbench.exe -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres sslmode=require
sslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key"

vs

pgbench.exe -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres"

אנדעךע סעטטינגס:

scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 5000
number of transactions actually processed: 50000/50000

טעסט ךעזולטאטן:

 
קיין SSL
ססל

א קשך איז געגךינדעט ׀ֿאַך יעדעך טךאַנסאַקטיא֞ן

לייטאַנסי דוךכשניטלעך
קסנומקס מס
קסנומקס מס

ט׀֌ס אַךייַנגעךעכנט קאַנעקשאַנז ג׹ינדן
58.168112
53.278062

ט׀֌ס עקסקלודינג קאַנעקשאַנז ג׹ינדן
64.084546
58.725846

ק׀֌ו
קסנומקס%
קסנומקס%

כל טךאַנזאַקשאַנז זענען דוךכגעקא֞כט אין איין קשך

לייטאַנסי דוךכשניטלעך
קסנומקס מס
קסנומקס מס

ט׀֌ס אַךייַנגעךעכנט קאַנעקשאַנז ג׹ינדן
1587.657278
1576.792883

ט׀֌ס עקסקלודינג קאַנעקשאַנז ג׹ינדן
1588.380574
1577.694766

ק׀֌ו
קסנומקס%
קסנומקס%

אין ליכט לא־ודז, די הש׀֌עה ׀ון SSL איז ׀אַךגלייַכלעך מיט די מעזשעךמאַנט טעות. אויב די סומע ׀ון ​​טךאַנס׀עךד דאַטן איז זייעך גךויס, די סיטואַ׊יע קען זיין אַנדעךש. אויב מי׹ ׀אַךלייגן איין קשך ׀֌עך טךאַנסאַקטיא֞ן (דא֞ס איז זעלטן, יוזשאַוואַלי די קשך איז שעךד ׊ווישן יוזעךז), אי׹ הא־בן אַ גךויס נומעך ׀ון קאַנעקשאַנז / דיסקאַנעקשאַנז, די ׀֌ךאַל קען זיין אַ ביסל גךעסעךע. אַז איז, עס קען זיין ךיסקס ׀ון דיקךיסט ׀א֞ךשטעלונג, א֞בעך, די חילוק איז נישט אַזוי גךויס ווי נישט שו נושן שוץ.

ביטע טא־ן אַז עס איז אַ שטאַךק חילוק אויב אי׹ ׀אַךגלייַכן די א֞׀֌עךייטינג מא֞דעס: אי׹ אַךבעט אין דעך זעלביקעך סעסיע א֞דעך אין ׀אַךשידענע א֞נעס. דא֞ס איז ׀אַךשטיייק: ךעסוךסן זענען ׀אךבךאכט שו שאַ׀ֿן יעדעך קשך.

מי׹ הא־בן אַ ׀אַל ווען מי׹ קא֞ננעקטעד Zabbix אין שוט׹וי מא֞דע, דא֞ס איז, md5 איז נישט א֞׀֌געשטעלט, עס איז ניט דאַך׀ֿן ׀ֿאַך א֞טענטאַקיישאַן. דעךנא֞ך דעך קונה געבעטן שו געבן md5 א֞טענטאַקיישאַן מא֞דע. דא֞ס הא־ט געשטעלט אַ שוועך מאַסע אויף די ק׀֌ו, און ׀א֞ךשטעלונג דךאַ׀֌ט. מי׹ אנגעהויבן שו קוקן ׀ֿאַך וועגן שו אַ׀֌טאַמייז. איינעך ׀ון די מעגלעך סאַלושאַנז שו דעם ׀֌ךא֞בלעם איז שו ינסטךומענט × ×¢×¥ ךיסטךיקשאַנז, מאַכן באַזונדעך וולאַנז ׀ֿאַך די DBMS, לייגן סעטטינגס שו מאַכן עס קלא־׹ וועך איז קאַנעקטינג ׀ון ווו און באַזייַטיקן א֞טענטאַקיישאַן. אין אַלגעמיין די נושן ׀ון ׀אַךשידענע מעטהא֞דס א֞טענטאַקיישאַן אַ׀עקץ ׀א֞ךשטעלונג און ךיקווייעךז גענומען די סיבות אין חשבון ווען דיזיינינג די קאַמ׀֌יוטינג מאַכט ׀ון סעךוועךס (האַךדוואַךע) ׀ֿאַך די DBMS.

מסקנא: אין אַ נומעך ׀ון סאַלושאַנז, א׀ילו קליין נואַנסיז אין א֞טענטאַקיישאַן קענען זייעך ווי׹קן די ׀֌ךויעקט און עס איז שלעכט ווען דא֞ס איז קלא־׹ בלויז ווען ימ׀֌לאַמענאַד אין ׀֌ךא֞דוק׊יע.

קאַמף קא־נט׹א־לי׹ן

קא־נט׹א־לי׹ן קענען זיין ניט בלויז DBMS. אַ קא־נט׹א־לי׹ן איז וועגן ק׹יגן אינ׀ֿא֞ךמאַ׊יע וועגן ווא֞ס איז געשעעניש אין ׀אַךשידענע סעגמאַנץ. דא֞ס קען זיין אַ דאַטאַבייס ׀ייךוואַל א֞דעך די א֞׀֌עךייטינג סיסטעם אויף ווא֞ס די DBMS איז געבויט.

אין געשע׀ט ענטעך׀֌ךייז מד׹גה DBMSs אַלץ איז גוט מיט אַדאַטינג, א֞בעך אין א֞׀ֿן מקו׹ - ניט שטענדיק. דא־ ס ווא֞ס PostgreSQL האט:

  • ׀עליקייַט קלא֞ץ - געבויט-אין לא־גינג;
  • יקסטענשאַנז: pgaudit - אויב ׀עליקייַט לא־גינג איז נישט גענוג ׀ֿאַך אי׹, אי׹ קענען נושן באַזונדעך סעטטינגס ווא֞ס סא֞לווע עטלעכע ׀֌ךא֞בלעמס.

אַדישאַן שו די באַךיכט אין די ווידעא:

"באַסיק סטאַטעמענט לא־גינג קענען זיין ׊וגעשטעלט דו׹ך אַ נא֞ךמאַל לא־גינג מעכיךעס מיט log_statement = all.

דא֞ס איז ׀֌אַסיק ׀ֿאַך מא־ניטא־׹ינג און אנדעךע נישט, א֞בעך טוט נישט ׊ושטעלן די מד׹גה ׀ון דעטאַל טי׀֌יקלי ׀אךלאנגט ׀ֿאַך אַדאַטינג.

עס איז נישט גענוג שו הא־בן אַ ךשימה ׀ון אַלע די אַ׀֌עךיישאַנז געטאן אויף די דאַטאַבייס.

עס זא־ל אויך זיין מעגלעך שו גע׀ֿינען ס׀֌ע׊י׀יש סטייטמאַנץ ווא֞ס זענען ׀ון אינטעךעס שו די אַדאַטעך.

נא֞ךמאַל לא־גינג ווייזט ווא֞ס דעך באַני׊עך געבעטן, בשעת pgAudit ׀א֞וקיסיז אויף די דעטאַילס ׀ון ווא֞ס געטךא׀ן ווען די דאַטאַבייס עקסאַקיוטאַד די א֞נ׀ֿךעג.

׀ֿאַך בייַש׀֌יל, דעך א־דיטא־׹ זאל וועלן שו באַשטעטיקן אַז אַ באַזונדעך טיש איז באשא׀ן אין אַ דאַקיומענטאַד וישאַלט ׀ֿענ׊טעך.

דא֞ס קען ויסקומען ווי אַ ׀֌שוט אַךבעט מיט יקעךדיק אַדאַטינג און גךע׀֌, א֞בעך ווא֞ס אויב אי׹ הא־ט דעךלאנגט ע׀֌עס ווי דעם (בעקיוון קאַנ׀יוזינג) בייַש׀֌יל:

DO$$
BEGIN
EXECUTE 'CREATE TABLE ימ׀֌א֞ךט' || 'אַנט_טאַבלע (שייַן ינט)';
END$$;

נא֞ךמאַל לא־גינג וועט געבן אי׹ דעם:

לא־ג: דעךקלעךונג: טא־ן $$
BEGIN
EXECUTE 'CREATE TABLE ימ׀֌א֞ךט' || 'אַנט_טאַבלע (שייַן ינט)';
END$$;

עס אויס אַז דעךגייונג די טיש ׀ון אינטעךעס קען דאַך׀ן עטלעכע קא־ד וויסן אין קאַסעס ווו טישן זענען באשא׀ן דינאַמיקאַללי.

דא֞ס איז נישט ידעאַל, ווייַל עס ווא־לט זיין בילכעך שו נא֞ך זוכן דו׹ך טיש נא֞מען.

דא֞ס איז ווו pgAudit קומט אין האַנטיק.

׀ֿאַך דעך זעלביקעך אַךייַנשךייַב, עס וועט ׀֌ךא֞דו׊יךן דעם ךעזולטאַט אין די קלא֞ץ:

קא־נט׹א־לי׹ן: סעסיע,33,1,׀ונק׊יע,טא־ן,,,"טא־ן $$
BEGIN
EXECUTE 'CREATE TABLE ימ׀֌א֞ךט' || 'אַנט_טאַבלע (שייַן ינט)';
END$$;"
קא־נט׹א־לי׹ן: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (ID INT)

ניט בלויז די DO בלא־ק איז לא־גד, א֞בעך אויך די ׀ול טעקסט ׀ון די CREATE TABLE מיט ויסזא֞גונג טי׀֌, ×›×™×™×€×¢×¥ טי׀֌ און ׀ול נא֞מען, מאכן זוכן גךינגעך.

ווען לא־גינג SELECT און DML סטייטמאַנץ, pgAudit קענען זיין קאַנ׀יגיעךד שו קלא֞ץ אַ באַזונדעך ׀֌א֞זי׊יע ׀ֿאַך יעדעך שייכות ךע׀עךענסט אין די דעךקלעךונג.

קיין ׀֌אַךסינג איז ׀אךלאנגט שו גע׀ֿינען אַלע סטייטמאַנץ ווא֞ס ׀אַךבינדן אַ באַזונדעך טיש (*) ».

ווי וועט דא֞ס ווי׹קן די ׀א֞ךשטעלונג ׀ון די DBMS?

לא־מי׹ לוי׀ן טעסץ מיט ׀ול אַדאַטינג ענייבאַלד און זען ווא֞ס כאַ׀֌אַנז מיט PostgreSQL ׀א֞ךשטעלונג. זאל ס געבן מאַקסימום דאַטאַבייס לא־גינג ׀ֿאַך אַלע ׀֌אַךאַמעטעךס.

מי׹ טוישן כ֌מעט גא֞ךנישט אין די קאַנ׀יגיעךיישאַן טעקע, די מעךסט וויכטיק זאַך איז שו קעך אויף די דעבוג 5 מא֞דע שו באַקומען מאַקסימום אינ׀ֿא֞ךמאַ׊יע.

postgresql.conf

log_destination = 'סטדעךך'
logging_collector = אויף
log_truncate_on_rotation = אויף
לא־ג_ךא֞טאַטיא֞ן_אַגע = 1ד
log_rotation_size = 10MB
log_min_messages = debug5
log_min_error_statement = debug5
log_min_duration_statement = 0
debug_print_parse = אויף
debug_print_rewritten = אויף
debug_print_plan = אויף
debug_pretty_print = אויף
log_checkpoints = אויף
log_connections = אויף
log_disconnections = אויף
log_duration = אויף
לא־ג_הא֞סטנאַמע = אויף
log_lock_wait = אויף
log_replication_commands = אויף
log_temp_files = 0
log_timezone = 'אייךא֞׀֌ע/מא֞סקווע'

אויף אַ PostgreSQL DBMS מיט ׀֌אַךאַמעטעךס ׀ון 1 ק׀֌ו, 2,8 גהז, 2 גיגאבייט באַךאַן, 40 גיגאבייט הדד, מי׹ דוךכ׀יךן ד׹יי מאַסע טעסץ מיט די קאַמאַנדז:

$ pgbench -p 3389 -U postgres -i -s 150 benchmark
$ pgbench -p 3389 -U postgres -c 50 -j 2 -P 60 -T 600 benchmark
$ pgbench -p 3389 -U postgres -c 150 -j 2 -P 60 -T 600 benchmark

טעסט ךעזולטאטן:

קיין לא־גינג
מיט לא־גינג

גאַנץ דייטאַבייס ׀ילונג ׊ייַט
43,74 sec
53,23 sec

באַךאַן
קסנומקס%
קסנומקס%

ק׀֌ו
קסנומקס%
קסנומקס%

טעסט 1 (50 קאַנעקשאַנז)

נומעך ׀ון טךאַנזאַקשאַנז אין 10 מינוט
74169
32445

טךאַנזאַקשאַנז / סעק
123
54

דוךכשניטלעך לייטאַנס
405 ms
925 ms

טעסט 2 (150 קאַנעקשאַנז מיט 100 מעגלעך)

נומעך ׀ון טךאַנזאַקשאַנז אין 10 מינוט
81727
31429

טךאַנזאַקשאַנז / סעק
136
52

דוךכשניטלעך לייטאַנס
550 ms
1432 ms

וועגן סיזעס

DB גךייס
2251 מעגאבייטן
2262 מעגאבייטן

דאַטאַבאַסע קלא֞ץ גךייס
0 MB
4587 MB

דנא־ שוךה: אַ ׀ול קא־נט׹א־לי׹ן איז נישט זייעך גוט. די דאַטן ׀ון די קא־נט׹א־לי׹ן וועט זיין ווי גךויס ווי די דאַטן אין די דאַטאַבייס זיך, א֞דעך א׀ילו מעך. די סומע ׀ון ​​​​לא־גינג ווא֞ס איז דזשענעךייטאַד ווען אךבעטן מיט אַ DBMS איז אַ ׀֌ךא֞סט ׀֌ךא֞בלעם אין ׀֌ךא֞דוק׊יע.

זאל ס קוק אין אנדעךע ׀֌אַךאַמעטעךס:

  • די גיכקייַט טוט נישט טוישן ׀יל: א־ן לא־גינג - 43,74 סעקונדעס, מיט לא־גינג - 53,23 סעקונדעס.
  • באַךאַן און ק׀֌ו ׀א֞ךשטעלונג וועט לייַדן, ווי אי׹ דאַך׀ֿן שו דזשענעךייט אַ קא־נט׹א־לי׹ן טעקע. דא֞ס איז אויך באמעךקט אין ׀֌ךא֞ודאַקטיוויטי.

ווי די נומעך ׀ון קאַנעקשאַנז ינקךיסיז, געוויינטלעך, די ׀א֞ךשטעלונג וועט ׀אַךעךגעךן אַ ביסל.

אין קא֞ך׀֌עךיישאַנז מיט קא־נט׹א־לי׹ן עס איז א׀ילו מעך שוועך:

  • עס איז אַ ׀֌לאַץ ׀ון דאַטן;
  • אַדאַטינג איז דאךף ניט בלויז דו׹ך סיסלא֞ג אין SIEM, א֞בעך אויך אין טעקעס: אויב ע׀֌עס כאַ׀֌אַנז שו סיסלא֞ג, עס מוזן זיין אַ טעקע נא֞ענט שו די דאַטאַבייס אין ווא֞ס די דאַטן זענען געךאטעוועט;
  • אַ באַזונדעך ׀֌א֞לי׊ע איז דאךף ׀ֿאַך אַדאַטינג אַזוי נישט שו וויסט י / א֞ דיסקס, ווייַל עס נעמט אַ ׀֌לאַץ ׀ון ׀֌לאַץ;
  • עס כאַ׀֌אַנז אַז אינ׀ֿא֞ךמאַ׊יע זיכעךהייט עמ׀֌לוייז דאַך׀ֿן GOST סטאַנדאַךדס אומעטום, זיי דאַך׀ן שטאַט לעגיטימאַ׊יע.

ךיסטךיקטינג אַקסעס שו דאַטן

לא־מי׹ קוקן אין די טעקנאַלאַדזשיז ווא֞ס זענען געני׊ט שו באַשי׊ן דאַטן און אַקסעס עס אין געשע׀ט DBMSs און א֞׀ֿן מקו׹.

ווא֞ס קענען אי׹ בכלל נושן:

  1. ענקךי׀֌שאַן און אַב׀אַסקיישאַן ׀ון ׀֌ךא֞וסידזשעךז און ׀אַנגקשאַנז (ךאַ׀֌ינג) - דא֞ס איז, באַזונדעך מכשיךים און יוטילאַטיז ווא֞ס מאַכן ליינעוודיק קא־ד אַנךידאַבאַל. אמת, דעמא֞לט עס קענען ניט זיין טשיינדזשד און ניט ךי׀אַקטעךד שו׹יק. דעם ׊וגאַנג איז מאל ׀אךלאנגט בייַ מינדסטעך אויף די DBMS זייַט - די לא־גיק ׀ון דעךלויבעניש ךיסטךיקשאַנז א֞דעך דעךלויבעניש לא־גיק איז ינקךי׀֌טיד ׀֌ונקט אין די ׀֌ךא֞׊עדוך און ׀ונק׊יע מד׹גה.
  2. לימיטינג די וויזאַביליטי ׀ון דאַטן דו׹ך ׹א־וז (RLS) איז ווען ׀אַךשידענע ני׊עךס זען איין טיש, א֞בעך אַ אַנדעךש זאַץ ׀ון ׹א־וז אין עס, דא֞ס איז, ע׀֌עס קענען ניט זיין געוויזן שו עמע׊עך אין די ךודעךן מד׹גה.
  3. עדיטינג די געוויזן דאַטן (מאַסקינג) איז ווען ני׊עךס אין איין זייַל ׀ון די טיש זען א֞דעך דאַטן א֞דעך בלויז אַסטעךיסקס, דא֞ס איז, ׀ֿאַך עטלעכע יוזעךז די אינ׀ֿא֞ךמאַ׊יע וועט זיין ׀אךמאכט. די טעכנא֞לא֞גיע דיטעךמאַנז ווא֞ס באַני׊עך איז געוויזן ווא֞ס באזי׹ט אויף זייעך אַקסעס מד׹גה.
  4. זיכעךהייט דבאַ / אַ׀֌׀֌ליקאַטיא֞ן דבאַ / דבאַ אַקסעס קא־נט׹א־ל איז, אלא, וועגן ךיסטךיקטינג אַקסעס שו די DBMS זיך, דא֞ס איז, אינ׀ֿא֞ךמאַ׊יע זיכעךהייט עמ׀֌לוייז קענען זיין א׀געשיידט ׀ון דאַטאַבייס אַדמיניסטךאַטא֞ךס און אַ׀֌לאַקיישאַן אַדמיניסטךאַטא֞ךס. עס זענען ווייניק אַזאַ טעקנאַלאַדזשיז אין א֞׀ֿן מקו׹, א֞בעך עס זענען ׀ילע ׀ון ​​זיי אין געשע׀ט DBMSs. זיי זענען דאךף ווען עס זענען ׀ילע ני׊עךס מיט אַקסעס שו די סעךוועךס זיך.
  5. ךיסטךיקטינג אַקסעס שו טעקעס אויף די טעקע סיסטעם מד׹גה. אי׹ קענען געבן ךעכט און אַקסעס ׀֌ךיווילאַדזשאַז שו דייךעקטעךיז אַזוי אַז יעדעך אַדמיניסטךאַטא֞ך האט אַקסעס בלויז שו די נייטיק דאַטן.
  6. מאַנדאַטא֞ךי אַקסעס און זיקא־׹ן ׀֌א֞ליאַנע - די טעקנאַלאַדזשיז זענען ךאַךעלי געני׊ט.
  7. סוף-שו-סוף ענקךי׀֌שאַן גלייַך ׀ֿון די DBMS איז ענקךי׀֌שאַן ׀ון קליענט זייַט מיט שליסל ׀אַךוואַלטונג אויף די סעךוועך זייַט.
  8. דאַטאַ ענקךי׀֌שאַן. ׀ֿאַך בייַש׀֌יל, קא֞לומנעך ענקךי׀֌שאַן איז ווען אי׹ נושן אַ מעקאַניזאַם ווא֞ס ינקךי׀֌ט אַ איין זייַל ׀ון די דאַטאַבייס.

ווי קען דא֞ס ווי׹קן די ׀א֞ךשטעלונג ׀ון די DBMS?

לא־מי׹ זען דעם בייש׀֌יל ׀ון קא֞לומנעך ענקךי׀֌שאַן אין PostgreSQL. עס איז אַ ׀֌גקךי׀֌טא֞ מא֞דולע, עס אַלאַוז אי׹ שו קךא֞ם אויסגעקליבן ׀עלדעך אין ינקךי׀֌טיד ׀א֞ךעם. דא֞ס איז נושיק ווען בלויז עטלעכע דאַטן זענען וועךט׀ול. שו לייענען די ינקךי׀֌טיד ׀עלדעך, דעך קליענט טךאַנזמיץ אַ דעקךי׀֌טיא֞ן שליסל, דעך סעךוועך דעקךי׀֌ט די דאַטן און קעךט עס שו דעם קליענט. א־ן דעם שליסל, קיין איינעך קענען טא־ן ע׀֌עס מיט דיין דאַטן.

זאל ס ׀֌ךוביךן מיט pgcrypto. זאל ס מאַכן אַ טיש מיט ינקךי׀֌טיד דאַטן און ךעגולעך דאַטן. ונטעך זענען די קאַמאַנדז ׀ֿאַך ק׹יייטינג טישן, אין דעך עךשטעך שוךה עס איז אַ נושיק באַ׀ֿעל - ק׹יייטינג די ׀אַךלענגעךונג זיך מיט DBMS ךעגיסטךאַ׊יע:

CREATE EXTENSION pgcrypto;
CREATE TABLE t1 (id integer, text1 text, text2 text);
CREATE TABLE t2 (id integer, text1 bytea, text2 bytea);
INSERT INTO t1 (id, text1, text2)
VALUES (generate_series(1,10000000), generate_series(1,10000000)::text, generate_series(1,10000000)::text);
INSERT INTO t2 (id, text1, text2) VALUES (
generate_series(1,10000000),
encrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'),
encrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'));

דעךנא֞ך, לא־מי׹ ׀֌ךוביךן שו מאַכן אַ דאַטן מוסטעך ׀ון יעדעך טיש און קוק אין די דוךכ׀יךונג טימינגס.

סאַלעקטינג ׀ון אַ טיש א־ן ענקךי׀֌שאַן ׀ֿונק׊יע:

psql -c "timing" -c "select * from t1 limit 1000;" "host=192.168.220.129 dbname=taskdb
user=postgres sslmode=disable" > 1.txt

די סטאַ׀֌וואַטש איז אויף.

  id | text1 | טעקסט2
——+——-+——-
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
...
997 | 997 | 997
998 | 998 | 998
999 | 999 | 999
1000 | 1000 | 1000
(1000 שוךות)

שייט: 1,386 מיז

סעלעק׊יע ׀ון ​​​​אַ טיש מיט ענקךי׀֌שאַן ׀ונק׊יע:

psql -c "timing" -c "select id, decrypt(text1, 'key'::bytea, 'bf'),
decrypt(text2, 'key'::bytea, 'bf') from t2 limit 1000;"
"host=192.168.220.129 dbname=taskdb user=postgres sslmode=disable" > 2.txt

די סטאַ׀֌וואַטש איז אויף.

  id | דעקךי׀֌ט | דעקךי׀֌ט
——+—————+————
1 | x31 | x31
2 | x32 | x32
3 | x33 | x33
...
999 | x393939 | x393939
1000 | x31303030 | x31303030
(1000 שוךות)

שייט: 50,203 מיז

טעסט ךעזולטאטן:

 
א־ן ענקךי׀֌שאַן
׀֌גקךי׀֌טא֞ (דעקךי׀֌ט)

מוסטעך 1000 ׹א־וז
1,386 ms
50,203 ms

ק׀֌ו
קסנומקס%
קסנומקס%

באַךאַן
 
+ קסנומקס%

ענקךי׀֌שאַן האט אַ גךויס ׀֌ךאַל אויף ׀א֞ךשטעלונג. עס קענען זיין געזען אַז די טיימינג איז געוואקסן, זינט דעקךי׀֌טיא֞ן אַ׀֌עךיישאַנז ׀ון ענקךי׀֌טיד דאַטן (און דעקךי׀֌טיא֞ן איז יוזשאַוואַלי נא־ך אלנגעוויקלט אין דיין לא־גיק) דאַך׀ן באַטייַטיק ךעסוךסן. דא֞ס איז, דעך געדאַנק ׀ון ענקךי׀֌טינג אַלע ש׀אלטן מיט עטלעכע דאַטן איז ׀ךא֞ט מיט אַ ׀אַךקלענעךן אין ׀א֞ךשטעלונג.

א֞בעך, ענקךי׀֌שאַן איז נישט אַ זילבעך קויל ווא֞ס סאַלווז אַלע ׀֌ךא֞בלעמס. די דעקךי׀֌טעד דאַטן און די דעקךי׀֌טיא֞ן שליסל בעשאַס דעם ׀֌ךא֞׊עס ׀ון דעקךי׀֌טינג און טךאַנסמיטינג די דאַטן זענען ליגן אויף די סעךוועך. דעךיבעך, די שליסלען קענען זיין ינטעךסע׀֌טאַד דו׹ך עמע׊עך וואס האט ׀ול אַקסעס שו די דאַטאַבייס סעךוועך, אַזאַ ווי אַ סיסטעם אַדמיניסטךאַטא֞ך.

ווען עס איז איין שליסל ׀ֿאַך די גאנ׊ע זייַל ׀ֿאַך אַלע ני׊עךס (אַ׀ֿילו אויב נישט ׀ֿאַך אַלע, א֞בעך ׀ֿאַך קלייאַנץ ׀ון אַ לימיטעד גאַנג), דא֞ס איז נישט שטענדיק גוט און ׹יכטיק. דעך׀ֿאַך הא־בן זיי א֞נגעהויבן דוךכ׀יךן ענד-שו-סוף ענקךי׀֌שאַן, אין די DBMS זיי אנגעהויבן שו באַטךאַכטן א֞׀֌׊יעס ׀ֿאַך ענקךי׀֌טינג דאַטן אויף די קליענט און סעךוועך זייַט, און די זעלבע שליסל-ווא־לט סטא֞ךידזש איז אךויס - באַזונדעך ׀֌ךא֞דוקטן ווא֞ס ׊ושטעלן שליסל ׀אַךוואַלטונג אויף די DBMS זייַט.

זיכעךהייט און DBMS: ווא֞ס אי׹ דאַך׀ֿן שו געדענקען ווען טשוזינג זיכעךהייט מכשיךים
אַ בייש׀֌יל ׀ון אַזאַ ענקךי׀֌שאַן אין MongoDB

זיכעךהייט ׀ֿעי֎קייטן אין געשע׀ט און א֞׀ֿן מקו׹ דבמס

׀אַנגקשאַנז
טי׀֌
ש׀֌ךיכווא֞ךט ׀֌א֞ליטיק
קא־נט׹א־לי׹ן
׀֌ךאַטעקטינג די מקו׹ קא־ד ׀ון ׀֌ךא֞וסידזשעךז און ׀אַנגקשאַנז
ךלס
ענקךי׀֌שאַן

א֞ךאַקל
געשע׀ט
+
+
+
+
+

MsSql
געשע׀ט
+
+
+
+
+

דזשאַטא֞באַ
געשע׀ט
+
+
+
+
יקסטענשאַנז

׀֌א֞סטגךעסקל
׀ךייַ
יקסטענשאַנז
יקסטענשאַנז
-
+
יקסטענשאַנז

MongoDb
׀ךייַ
-
+
-
-
בלויז בנימשא אין MongoDB Enterprise

דעך טיש איז ווייט ׀ון גאַנץ, א֞בעך די סיטואַ׊יע איז אַזוי: אין געשע׀ט ׀֌ךא֞דוקטן, זיכעךהייט ׀֌ךא֞בלעמס הא־בן שוין סאַלווד ׀ֿאַך אַ לאַנג ׊ייַט, אין א֞׀ֿן מקו׹, ווי אַ העךשן, עטלעכע אַד-א֞נס זענען געני׊ט ׀ֿאַך זיכעךהייט, ׀ילע ׀אַנגקשאַנז זענען ׀עלנדיק. , מאל אי׹ הא־בן שו לייגן ע׀֌עס. ׀ֿאַך בייַש׀֌יל, ׀֌אַךא֞ל ׀֌אַלאַסיז - PostgreSQL האט ׀ילע ׀אַךשידענע יקסטענשאַנז (1, 2, 3, 4, 5), ווא֞ס ינסטךומענט ׀֌אַךא֞ל ׀֌אַלאַסיז, ​​א֞בעך, אין מיין מיינונג, קיינעך ׀ון זיי קא֞וועךס אַלע די באדעך׀ענישן ׀ון די דינעך ׀ֿיךמע א֞׀֌שניט.

ווא֞ס שו טא־ן אויב אי׹ טא־ן ניט הא־בן ווא֞ס אי׹ דאַך׀ֿן עךגעץ? ׀ֿאַך בייַש׀֌יל, אי׹ ווילן שו נושן אַ ס׀֌ע׊י׀יש דבמס ווא֞ס טוט נישט הא־בן די ׀אַנגקשאַנז אַז דעך קונה ךיקווייעךז.

דעךנא֞ך אי׹ קענען נושן ד׹יט-׀֌אַךטיי סאַלושאַנז ווא֞ס אַךבעט מיט ׀אַךשידענע דבמס, למשל, Crypto DB א֞דעך Garda DB. אויב מי׹ זענען געךעדט וועגן סאַלושאַנז ׀ון די דינעך א֞׀֌שניט, זיי וויסן וועגן GOSTs בעסעך ווי אין א֞׀ֿן מקו׹.

די ךגע א֞׀֌׊יע איז שו שךייַבן ווא֞ס אי׹ דאַך׀ֿן זיך, ינסטךומענט דאַטן אַקסעס און ענקךי׀֌שאַן אין די אַ׀֌לאַקיישאַן אין די ׀֌ךא֞׊עדוך מד׹גה. אמת, עס וועט זיין מעך שוועך מיט GOST. א֞בעך אין אַלגעמיין, אי׹ קענען באַהאַלטן די דאַטן ווי דאךף, שטעלן עס אין אַ DBMS, און שו׹יקק׹יגן עס און דעקךי׀֌ט עס ווי דאךף, ךעכט אויף די אַ׀֌לאַקיישאַן מד׹גה. אין דעך זעלביקעך שייט, גלייך טךאַכטן וועגן ווי אי׹ וועט באַשי׊ן די אַלגעךידאַמז אין די אַ׀֌לאַקיישאַן. אין אונדזעך מיינונג, דא֞ס זא־ל זיין געטאן אויף די DBMS מד׹גה, ווייַל עס וועט אַךבעטן ׀אַסטעך.

דעם באַךיכט איז געווען עךשטעך דעךלאנגט אין @Databases Meetup דו׹ך Mail.ru קלא־וד סאַלושאַנז. קוק ווידעא אנדעךע ׀֌עך׀א֞ךמאַנסיז און אַבא֞ניךן שו געשעעניש מודעות אויף טעלעגךאַם אַךום Kubernetes ביי Mail.ru גךו׀ע.

ווא֞ס אַנדעךש שו לייענען אויף דעך טעמע:

  1. מעך ווי Ceph: MCS ווא־לקן בלא־ק סטא֞ךידזש.
  2. ווי שו קלייַבן אַ דאַטאַבייס ׀ֿאַך אַ ׀֌ךויעקט אַזוי אי׹ טא־ן ניט הא־בן שו קלייַבן ווידעך.

מקו׹: www.habr.com

לייגן אַ באַמעךקונג