ืฉืื ืื ืืก ืจืื'ืงืื, ืื ื ืจืืฉ ืคืืชืื ืชืืื ื ืืืืจืช Gazinformservice, ืืฆืืืช ืืืืฆืจ
ืืืืืจ ืืืื ืขื ืกืื ื ืืื ืืฉืขื
ืืืืืจ ืืืืื ืฉืืืฉื ืืืงืื:
- ืืืฆื ืืืืื ืืืืืจืื.
- ืืื ืืืงืืจืช ืคืขืืืืช ืืืื ืืชืขืืื ืื ืงืืจื ืืฆื ืืกืืก ืื ืชืื ืื ืืืชืืืจืื ืืืื.
- ืืืฆื ืืืื ืขื ืื ืชืื ืื ืืืกื ืื ืชืื ืื ืขืฆืื ืืืืื ืืื ืืืืืืืช ืืืื ืืช ืืื.
ืฉืืืฉื ืืจืืืืื ืฉื ืืืืืช DBMS: ืืื ืช ืืืืืจ, ืืืงืืจืช ืคืขืืืืช ืืืื ื ืขื ื ืชืื ืื
ืืืืืช ืืงืฉืจืื ืฉืื
ืืชื ืืืื ืืืชืืืจ ืืืกื ืื ืชืื ืื ืืืืคื ืืฉืืจ ืื ืขืงืืฃ ืืืืฆืขืืช ืืืฉืืื ืืื ืืจื ื. ืืืื, ืืืฉืชืืฉ ืืขืกืงื, ืืืืืจ ืืืื ืฉืขืืื ืขื ื-DBMS, ืืงืืื ืืืชื ืืื ืืจืืงืฆืื ืืขืงืืคืื.
ืืคื ื ืฉืืืืจืื ืขื ืืื ื ืขื ืงืฉืจืื, ืขืืื ืืขื ืืช ืขื ืฉืืืืช ืืฉืืืืช ืฉืงืืืขืืช ืืืฆื ืืื ื ืืืฆืขื ืืืืื:
- ืืื ืืฉืชืืฉ ืขืกืงื ืืื ืฉืืื ืขืจื ืืืฉืชืืฉ DBMS ืืื?
- ืืื ืืืืฉื ืื ืชืื ื DBMS ืืกืืคืงืช ืจืง ืืจื API ืฉืืชื ืฉืืื ืื, ืื ืื ืืฉ ืืืฉื ืืืืืืืช ืืฉืืจืืช;
- ืืื ื-DBMS ืืืงืฆื ืืืงืืข ืืืื ื ืคืจื, ืื ืืชืงืฉืจ ืืืชื ืืืืฆื;
- ืืื ื ืขืฉื ืฉืืืืฉ ืืฉืืืืช ืืืืจ/ืคืจืืงืกื ืืฉืืืืช ืืื ืืื, ืฉืืืืืืช ืืฉื ืืช ืืืืข ืขื ืืืคื ืื ืืืช ืืืืืืจ ืืื ืืฉืชืืฉ ืืืกื ืื ืชืื ืื.
ืขืืฉืื ืืืื ื ืจืื ืืืืื ืืืื ื ืืชื ืืืฉืชืืฉ ืืื ืืืืื ืืืืืจืื:
- ืืฉืชืืฉ ืืคืชืจืื ืืช ืืืชืช ืืืืช ืืฉ ืฉื ืืกื ื ืชืื ืื. ืฉืืืช ืืื ื ื ืืกืคืช ืชืืืืจ, ืืื ืืคืืืช, ืืช ืืฉืงืืคืืช ืฉื ืืืชืจืืฉ ื-DBMS, ืืืืงืกืืืื ืชืืื ืืกืคืง ืืื ื ื ืืกืคืช ืขื ืืืืข.
- ืืฉืชืืฉ ืืืืื ืืืช ืกืืกืืืืช. ืืฉืืืืฉ ืืื ืชืืื ืืืืคื ืฉืื ืืืจืืืืงืืืจื ืฉืื ื ืื ืืช. ืืื ืืงืจื, ืกืืกืื ืืืช ืืงืืืฅ ืืชืฆืืจื ืฉื ืืคืืืงืฆืืืช ืืื ืืจื ื ืฉืืชืืืจืช ื-DBMS ืืื ื ืืกืคืืงื ืืืื ื. ืืฉื ื ืืกืคืจ ืืื DBMS ืืืืคืฉืจืื ืื ืืฉืืื ืืื ืฉืืืฉืชืืฉ ืืืกืืกืื ืืืจืฉืื ืขืืืื.
ืืชื ืืืื ืืงืจืื ืขืื ืขื ืคืื ืงืฆืืืช ืืืจืื ืืฉืชืืฉืื
ืืื , ืชืืื ืื ืืืจืจ ืขื MS SQL Vulnerability Assessmenืืื . - ืืืขืฉืืจ ืืช ืืืงืฉืจ ืฉื ืืคืืืฉื ืืืืืข ืืืจืืฉ. ืื ืืคืืืฉื ืืืืื, ืืื ืื ืืืื ืื ืื ืขืืื ื-DBMS ืืืกืืจืชื, ื ืืชื ืืืกืืจืช ืืคืขืืื ืืืชืืฆืขืช ืืืืกืืฃ ืืืืข ืื ืขืืฉื ืื ืืืื. ืืืืข ืื ื ืืชื ืืจืืืช ืืืืงืืจืช.
- ืืืืจ SSL ืื ืืื ืื ืืคืจืืช ืจืฉืช ืืื ื-DBMS ืืืฉืชืืฉื ืืงืฆื; ืื ืื ื-VLAN ื ืคืจื. ืืืงืจืื ืืืื, ืืืื ืืืื ืขื ืืขืจืืฅ ืืื ืืฆืจืื ื-DBMS ืขืฆืื. ืืื ืืืืื ืืืื ืื ืื ืืงืื ืคืชืื.
ืืืฆื ืื ืืฉืคืืข ืขื ืืืืฆืืขืื ืฉื ื-DBMS?
ืืื ื ืกืชืื ืขื ืืืืืื ืฉื PostgreSQL ืืื ืืจืืืช ืืืฆื SSL โโืืฉืคืืข ืขื ืขืืืก ืืืขืื, ืืืืื ืชืืืื ืื ืืืคืืืช TPS, ืืืื ืืื ืืฆืจืื ืืืชืจ ืืื ืืฉืืืื ืื ืชืคืขืื ืืืชื.
ืืขืื ืช PostgreSQL ืืืืฆืขืืช pgbench ืืื ืชืืื ืืช ืคืฉืืื ืืืคืขืืช ืืืื ื ืืืฆืืขืื. ืืื ืืืฆืข ืจืฆืฃ ืืืื ืฉื ืคืงืืืืช ืฉืื ืืฉืื, ืืืื ืืืคืขืืืช ืืงืืืืืช ืฉื ืืกื ื ืชืื ืื, ืืืืืจ ืืื ืืืฉื ืืช ืงืฆื ืืขืกืงืืืช ืืืืืฆืข.
ืืืืงื 1 ืืื SSL ืืฉืืืืฉ ื-SSL - ืืืืืืจ ื ืืฆืจ ืขืืืจ ืื ืขืกืงื:
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 ืืื SSL ืืฉืืืืฉ ื-SSL - ืื ืืขืกืงืืืช ืืืืฆืขืืช ืืืืืืจ ืืื:
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
SSL
ื ืืฆืจ ืืืืืจ ืืื ืขืกืงื
ืืืืฆืข ืืฉืืื
171.915 ms
187.695 ms
tps ืืืื ืืฆืืจืช ืงืฉืจืื
58.168112
53.278062
tps ืื ืืืื ืืฆืืจืช ืืืืืจืื
64.084546
58.725846
CPU
24%
28%
ืื ืืขืกืงืืืช ืืืืฆืขืืช ืืืืืืจ ืืื
ืืืืฆืข ืืฉืืื
6.722 ms
6.342 ms
tps ืืืื ืืฆืืจืช ืงืฉืจืื
1587.657278
1576.792883
tps ืื ืืืื ืืฆืืจืช ืืืืืจืื
1588.380574
1577.694766
CPU
17%
21%
ืืขืืืกืื ืงืืื, ืืืฉืคืขื ืฉื SSL ืืืื ืืฉืืืืช ืืืืืื. ืื ืืืืช ืื ืชืื ืื ืืืืขืืจืื ืืืืื ืืืื, ืืืฆื ืขืฉืื ืืืืืช ืฉืื ื. ืื ื ืืฆืืจ ืืืืืจ ืืื ืืื ืขืกืงื (ืื ื ืืืจ, ืืืจื ืืื ืืืืืืจ ืืฉืืชืฃ ืืื ืืืฉืชืืฉืื), ืืฉ ืื ืืกืคืจ ืจื ืฉื ืืืืืจืื/ื ืืชืืงืื, ืืืฉืคืขื ืขืฉืืื ืืืืืช ืงืฆืช ืืืชืจ ืืืืื. ืืืืืจ, ืืืชืื ื ืกืืืื ืื ืืืจืืื ืืืืฆืืขืื, ืขื ืืืช, ืืืืื ืืื ื ืื ืืืื ืขื ืื ืฉืืืืฉ ืืืื ื.
ืฉืื ืื ืฉืืฉ ืืืื ืืืื ืื ืืชื ืืฉืืื ืืช ืืฆืื ืืคืขืืื: ืืชื ืขืืื ืืืืชื ืกืฉื ืื ืืืฆืืื ืฉืื ืื. ืื ืืืื: ืืฉืืืื ืืืฉืงืขืื ืืืฆืืจืช ืื ืืืืืจ.
ืืื ืื ื ืืงืจื ืืฉืืืืจื ื ืืช Zabbix ืืืฆื trust, ืืืืืจ, md5 ืื ื ืืืง, ืื ืืื ืฆืืจื ืืืืืืช. ืืืืจ ืืื ืืืงืฉ ืืืงืื ืืืคืขืื ืืฆื ืืืืืช md5. ืื ืืื ืืก ืขืืืก ืจื ืขื ืืืขืื ืืืืืฆืืขืื ืืจืื. ืืชืืื ื ืืืคืฉ ืืจืืื ืืืืขื. ืืื ืืคืชืจืื ืืช ืืืคืฉืจืืื ืืืขืื ืืื ืืืืขืช ืืืืืืช ืจืฉืช, ืืฆืืจืช VLAN ื ืคืจืืื ืขืืืจ ื-DBMS, ืืืกืคืช ืืืืจืืช ืืื ืืืืืืจ ืื ืืชืืืจ ืืืืคื ืืืืกืืจ ืืืืืช. ื ืืชื ืื ืืืืขื ืืช ืืืืจืืช ืืืืืืช ืืื ืืืคืืืช ืขืืืืืช ืืขืช ืืคืขืืช ืืืืืืช, ืื ืืืืคื ืืืื ืืฉืืืืฉ ืืฉืืืืช ืฉืื ืืช ืืืืืช ืืฉืคืืข ืขื ืืืืฆืืขืื ืืืืจืฉ ืืงืืช ืืืฉืืื ืืช ืืืืจืืื ืืืื ืืขืช ืชืื ืื ืืื ืืืืฉืื ืฉื ืฉืจืชืื (ืืืืจื) ืขืืืจ ื-DBMS.
ืืกืงื ื: ืืืกืคืจ ืคืชืจืื ืืช, ืืคืืื ื ืืืื ืกืื ืงืื ืื ืืืืืืช ืืืืืื ืืืฉืคืืข ืืืื ืขื ืืคืจืืืงื ืืื ืจืข ืืืฉืจ ืื ืืชืืจืจ ืจืง ืืืฉืจ ืืืืฉื ืืืืฆืืจ.
ืืืงืืจืช ืคืขืืื
ืืืงืืจืช ืืืืื ืืืืืช ืื ืจืง DBMS. ืืืงืืจืช ืขืืกืงืช ืืืฉืืช ืืืืข ืขื ืืืชืจืืฉ ืืืืืจืื ืฉืื ืื. ืื ืืืืื ืืืืืช ืืืืช ืืฉ ืฉื ืืกื ื ืชืื ืื ืื ืืขืจืืช ืืืคืขืื ืฉืขืืื ืื ืื ื-DBMS.
ื-DBMS ืืจืืช Enterprise ืืืื ืืกืืจ ืขื ืืืงืืจืช, ืืื ืืงืื ืคืชืื - ืื ืชืืื. ืื ื ืื ืฉืืฉ ื-PostgreSQL:
- ืืืื ืืจืืจืช ืืืื - ืจืืฉืื ืืืื ื;
- ืืจืืืืช: pgaudit - ืื ืจืืฉืื ืืจืืจืช ืืืืื ืืื ื ืืกืคืืง ืขืืืจื, ืชืืื ืืืฉืชืืฉ ืืืืืจืืช ื ืคืจืืืช ืฉืคืืชืจืืช ืืืง ืืืืขืืืช.
ืชืืกืคืช ืืืืืื ืืกืจืืื:
"ืจืืฉืื ืืฆืืจืืช ืืกืืกื ืืืื ืืืื ืชื ืขื ืืื ืืชืงื ืจืืฉืื ืกืื ืืจืื ืขื log_statement = all.
ืื ืืงืืื ืื ืืืืจ ืืืฉืืืืฉืื ืืืจืื, ืื ืืื ื ืืกืคืง ืืช ืจืืช ืืคืืจืื ืื ืืจืฉืช ืืืจื ืืื ืืืืงืืจืช.
ืื ืืกืคืืง ืฉืืฉ ืจืฉืืื ืฉื ืื ืืคืขืืืืช ืฉืืืฆืขื ืืืกื ืื ืชืื ืื.
ืืื ืื, ืฆืจืื ืืืืืช ืืคืฉืจื ืืืฆืื ืืฆืืจืืช ืกืคืฆืืคืืืช ืฉืืขื ืืื ืืช ืจืืื ืืืฉืืื ืืืืงืจ.
ืจืืฉืื ืจืืื ืืฆืื ืืช ืื ืฉืืืฉืชืืฉ ืืืงืฉ, ืืขืื pgAudit ืืชืืงื ืืคืจืืื ืฉื ืื ืฉืงืจื ืืืฉืจ ืืกื ืื ืชืื ืื ืืืฆืข ืืช ืืฉืืืืชื.
ืืืืืื, ืืืืงืจ ืขืฉืื ืืจืฆืืช ืืืืื ืื ืืืื ืืกืืืืช ื ืืฆืจื ืืชืื ืืืื ืชืืืืงื ืืชืืขื.
ืื ืืืื ื ืจืืืช ืืื ืืฉืืื ืคืฉืืื ืขื ืืืืืืื ื ื-grep ืืกืืกืืื, ืืื ืื ืื ืืืฆื ืื ืืฉืื ืืื (ืืืืื ืืืืื ื) ืืืืืื ืืื:
ืขืฉื $$
ืืชืื
ืืฆืข 'ืืืืื โโืืฆืืจืช ืืืื' || 'ant_table(id int)';
END$$;
ืจืืฉืื ืจืืื ืืืชื ืื ืืช ืื:
LOG: ืืฆืืจื: DO $$
ืืชืื
ืืฆืข 'ืืืืื โโืืฆืืจืช ืืืื' || 'ant_table(id int)';
END$$;
ื ืจืื ืื ืืฆืืืช ืืืืช ืืขื ืืื ืขืฉืืื ืืืจืืฉ ืืืข ืืกืืื ืืงืื ืืืงืจืื ืืื ืืืืืืช ื ืืฆืจืืช ืืืืคื ืืื ืื.
ืื ืื ืืืืืืื, ืืืืืื ืฉืขืืืฃ ืคืฉืื ืืืคืฉ ืืคื ืฉื ืืืื.
ืื ืืืงืื ืฉืื pgAudit ืฉืืืืฉื.
ืขืืืจ ืืืชื ืงืื, ืืื ืืคืืง ืืช ืืคืื ืืื ืืืืื:
ืืืงืืจืช: SESSION,33,1,FUNCTION,DO,,,"DO $$
ืืชืื
ืืฆืข 'ืืืืื โโืืฆืืจืช ืืืื' || 'ant_table(id int)';
END$$;"
ืืืงืืจืช: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE ืืฉืื_ืืืื (ืืืื INT)
ืื ืจืง ืืืืง ื-DO ื ืจืฉื, ืืื ืื ืืืงืกื ืืืื ืฉื ื-CREATE TABLE ืขื ืกืื ืืฆืืจื, ืกืื ืืืืืืงื ืืฉื ืืื, ืื ืฉืืงื ืขื ืืืืคืืฉ.
ืืขืช ืจืืฉืื ืืฆืืจืืช SELECT ื-DML, ื ืืชื ืืืืืืจ ืืช ืชืฆืืจืช pgAudit ืืจืืฉืื ืขืจื ื ืคืจื ืขืืืจ ืื ืงืฉืจ ืฉืืืื ืืชืืืืก ืืืฆืืจื.
ืื ื ืืจืฉ ื ืืชืื ืืื ืืืฆืื ืืช ืื ืืืฆืืจืืช ืฉื ืืืขืืช ืืืืื ืืกืืืืช(
ืืืฆื ืื ืืฉืคืืข ืขื ืืืืฆืืขืื ืฉื ื-DBMS?
ืืืื ื ืจืืฅ ืืืืงืืช ืขื ืืคืขืืช ืืืงืืจืช ืืืื ืื ืจืื ืื ืงืืจื ืืืืฆืืขื PostgreSQL. ืืืื ื ืคืขืื ืจืืฉืื ืืกื ื ืชืื ืื ืืงืกืืืื ืขืืืจ ืื ืืคืจืืืจืื.
ืื ืื ื ืื ืืฉื ืื ืืืขื ืืืื ืืงืืืฅ ืืชืฆืืจื, ืืืืจ ืืืฉืื ืืืืชืจ ืืื ืืืคืขืื ืืช ืืฆื debug5 ืืื ืืงืื ืืงืกืืืื ืืืืข.
postgresql.conf
log_destination = 'stderr'
logging_collector = ืืืคืขื
log_truncate_on_rotation = ืืืคืขื
log_rotation_age = 1d
log_rotation_size = 10MB
log_min_messages = 5
log_min_error_statement = 5
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_hostname = ืคืืขื
log_lock_waits = ืคืืขื
log_replication_commands = ืคืืขื
log_temp_files = 0
log_timezone = 'ืืืจืืคื/ืืืกืงืื'
ื-PostgreSQL DBMS ืขื ืคืจืืืจืื ืฉื ืืขืื 1, 2,8 GHz, 2 GB RAM, 40 GB HDD, ืื ื ืขืืจืืื ืฉืืืฉ ืืืืงืืช ืขืืืก ืืืืฆืขืืช ืืคืงืืืืช:
$ 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 ืฉื ืืืช
53,23 ืฉื ืืืช
ืจื
24%
40%
CPU
72%
91%
ืืืืงื 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 ืฉื ืืืช.
- ืืืฆืืขื ืืืืจืื RAM ืืืขืื ืืืคืืขื, ืืืืืื ืฉืืชื ืฆืจืื ืืืฆืืจ ืงืืืฅ ืืืงืืจืช. ืื ืืืจืืฉ ืื ืืคืจืืืืงืืืืืืช.
ืืื ืฉืืกืคืจ ืืืืืืจืื ืืืื, ืืืืคื ืืืขื, ืืืืฆืืขืื ืืืืจืืจื ืืขื.
ืืชืืืืืื ืขื ืืืงืืจืช ืื ืืคืืื ืืืชืจ ืงืฉื:
- ืืฉ ืืจืื ื ืชืื ืื;
- ืืฉ ืฆืืจื ืืืืงืืจืช ืื ืจืง ืืจื syslog ื-SIEM, ืืื ืื ืืงืืฆืื: ืื ืืฉืื ืงืืจื ื-syslog, ืืืื ืืืืืช ืงืืืฅ ืงืจืื ืืืกื ืื ืชืื ืื ืฉืื ืื ืชืื ืื ื ืฉืืจืื;
- ืืืืงืืจืช ืืืจืฉืช ืืืฃ ื ืคืจื ืืื ืื ืืืืื ืืืกืงื ืงืื/ืคืื, ืืืืืื ืฉืืื ืชืืคืก ืืจืื ืืงืื;
- ืงืืจื ืฉืขืืืื ืืืืืช ืืืืข ืฆืจืืืื ืชืงื ื GOST ืืื ืืงืื, ืื ืืืจืฉืื ืืืืื ืืืื ื.
ืืืืืช ืืืฉื ืื ืชืื ืื
ืืืื ื ืกืชืื ืขื ืืืื ืืืืืืืช ืืืฉืืฉืืช ืืืื ื ืขื ื ืชืื ืื ืืืืฉื ืืืืื ื-DBMS ืืกืืจืืื ืืืงืื ืคืชืื.
ืืื ืืชื ืืืื ืืืฉืชืืฉ ืืืจื ืืื:
- ืืฆืคื ื ืืขืจืคืื ืฉื ื ืืืื ืืคืื ืงืฆืืืช (Wrapping) - ืืืืืจ, ืืืื ืืืื ืฉืืจืืช ื ืคืจืืื ืฉืืืคืืื ืงืื ืงืจืื ืืืืชื ืงืจืื. ื ืืื, ืื ืื ื ืืชื ืืฉื ืืช ืืืชื ืื ืืืืืืจ ืืืชื ืืืืฉ. ืืืฉื ืื ื ืืจืฉืช ืืขืืชืื ืืคืืืช ืืฆื ื-DBMS - ืืืืืืื ืฉื ืืืืืืช ืจืืฉืืื ืื ืืืืืงื ืฉื ืืจืฉืืืช ืืืฆืคื ืืืืืง ืืจืืช ืืคืจืืฆืืืจื ืืืคืื ืงืฆืื.
- ืืืืืช ืื ืจืืืช ืฉื ื ืชืื ืื ืืคื ืฉืืจืืช (RLS) ืืื ืืืฉืจ ืืฉืชืืฉืื ืฉืื ืื ืจืืืื ืืืื ืืืช, ืื ืืจืื ืฉืื ื ืฉื ืฉืืจืืช ืื, ืืืืืจ, ืื ื ืืชื ืืืฆืื ืืฉืื ืืืืฉืื ืืจืืช ืืฉืืจื.
- ืขืจืืืช ืื ืชืื ืื ืืืืฆืืื (ืืกืืื) ืืื ืืืฉืจ ืืฉืชืืฉืื ืืขืืืื ืืืช ืฉื ืืืืื ืจืืืื ื ืชืื ืื ืื ืจืง ืืืืืืืช, ืืืืืจ, ืขืืืจ ืืืง ืืืืฉืชืืฉืื ืืืืืข ืืืกืืจ. ืืืื ืืืืืื ืงืืืขืช ืืืืื ืืฉืชืืฉ ืืืฆื ืื ืขื ืกืื ืจืืช ืืืืฉื ืฉืื.
- ืืืืื ืืงืจืช ืืืฉื DBA/Application DBA/DBA ืขืืกืงืช, ืืืงืื ืืืช, ืืืืืืช ืืืืฉื ื-DBMS ืขืฆืื, ืืืืืจ, ื ืืชื ืืืคืจืื ืืื ืขืืืื ืืืืืช ืืืืข ืืื ืืื ืืกืื ื ืชืื ืื ืืื ืืื ืืืฉืืืื. ืืฉ ืืขื ืืื ืืืืืืืช ืืืื ืืงืื ืคืชืื, ืืื ืืฉ ืืจืื ืืื ืืืขืจืืืช DBMS ืืกืืจืืืช. ืื ื ืืืฆืื ืืืฉืจ ืืฉื ื ืืฉืชืืฉืื ืจืืื ืขื ืืืฉื ืืฉืจืชืื ืขืฆืื.
- ืืืืืช ืืืฉื ืืงืืฆืื ืืจืืช ืืขืจืืช ืืงืืฆืื. ื ืืชื ืืืขื ืืง ืืืืืืช ืืืจืฉืืืช ืืืฉื ืืกืคืจืืืช ืื ืฉืืื ืื ืื ืืขืจืืช ืชืืื ืืืฉื ืจืง ืื ืชืื ืื ืืืจืืฉืื.
- ืืืฉื ืืืื ืื ืืงืื ืืืืจืื - ืืื ืืืืืืืช ืืื ืืฉืืฉืืช ืืขืชืื ืจืืืงืืช.
- ืืฆืคื ื ืืงืฆื ืืงืฆื ืืฉืืจืืช ืื-DBMS ืืื ืืฆืคื ื ืืฆื ืืืงืื ืขื ื ืืืื ืืคืชืืืช ืืฆื ืืฉืจืช.
- ืืฆืคื ืช ืืืืข. ืืืืืื, ืืฆืคื ื ืขืืืืืช ืืื ืืืฉืจ ืืชื ืืฉืชืืฉ ืืื ืื ืื ืฉืืฆืคืื ืขืืืื ืืืืืช ืฉื ืืกื ืื ืชืื ืื.
ืืืฆื ืื ืืฉืคืืข ืขื ืืืืฆืืขืื ืฉื ื-DBMS?
ืืืื ื ืกืชืื ืขื ืืืืืื ืฉื ืืฆืคื ื ืขืืืืืช ื-PostgreSQL. ืืฉ ืืืืื pgcrypto, ืื ืืืคืฉืจ ืื ืืืืกื ืฉืืืช ื ืืืจืื ืืฆืืจื ืืืฆืคื ืช. ืื ืฉืืืืฉื ืืืฉืจ ืจืง ืืืง ืืื ืชืื ืื ืื ืืขืื ืขืจื. ืืื ืืงืจืื ืืช ืืฉืืืช ืืืืฆืคื ืื, ืืืงืื ืืฉืืจ ืืคืชื ืคืขื ืื, ืืฉืจืช ืืคืขื ื ืืช ืื ืชืื ืื ืืืืืืจ ืืืชื ืืืงืื. ืืื ืืืคืชื, ืืฃ ืืื ืื ืืืื ืืขืฉืืช ืฉืื ืืืจ ืขื ืื ืชืื ืื ืฉืื.
ืืืื ื ืืืืง ืขื 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 | ืืงืกื1 | ืืงืกื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 ืืืคืืืช ืืฉื ืืื
ืชืืฆืืืช ืืืืืงื:
ืืื ืืฆืคื ื
Pgcrypto (ืคืขื ืื)
ืืืืื ืฉื 1000 ืฉืืจืืช
1,386 ms
50,203 ms
CPU
15%
35%
ืจื
+% 5
ืืืฆืคื ื ืืฉ ืืฉืคืขื ืืืืื ืขื ืืืืฆืืขืื. ื ืืชื ืืจืืืช ืฉืืชืืืื ืืื, ืฉืื ืคืขืืืืช ืคืขื ืื ืฉื ื ืชืื ืื ืืืฆืคื ืื (ืืคืขื ืื ืขืืืื ืขืืืฃ ืืืืืืงื ืฉืืื) ืืืจืฉืืช ืืฉืืืื ืืฉืืขืืชืืื. ืืืืืจ, ืืจืขืืื ืฉื ืืฆืคื ืช ืื ืืขืืืืืช ืืืืืืืช ื ืชืื ืื ืืกืืืืืื ืืืื ืืืืื ืืจืืื ืืืืฆืืขืื.
ืขื ืืืช, ืืฆืคื ื ืืื ื ืืืืจ ืืกืฃ ืฉืคืืชืจ ืืช ืื ืืืขืืืช. ืื ืชืื ืื ืืืคืืขื ืืื ืืืคืชื ืืคืขื ืื ืืืืื ืชืืืื ืืคืขื ืื ืืืขืืจืช ืื ืชืื ืื ื ืืฆืืื ืืฉืจืช. ืืื, ืืืคืชืืืช ืืืืืื ืืืืืช ืืืืจืืื ืขื ืืื ืืืฉืื ืฉืืฉ ืื ืืืฉื ืืืื ืืฉืจืช ืืกื ืื ืชืื ืื, ืืืื ืื ืื ืืขืจืืช.
ืืืฉืจ ืืฉ ืืคืชื ืืื ืืื ืืขืืืื ืขืืืจ ืื ืืืฉืชืืฉืื (ืื ืื ืื ืขืืืจ ืืืื, ืืื ืขืืืจ ืืงืืืืช ืฉื ืกื ืืืืื), ืื ืื ืชืืื ืืื ืื ืืื. ืืื ืืชืืืื ืืขืฉืืช ืืฆืคื ื ืืงืฆื ืืงืฆื, ื-DBMS ืืืื ืืฉืงืื ืืคืฉืจืืืืช ืืืฆืคื ืช ื ืชืื ืื ืืฆื ืืืงืื ืืืฉืจืช, ืืืืคืืขื ืืืชื ืืืกืื ืืคืชื-ืืกืคืช - ืืืฆืจืื ื ืคืจืืื ืืืกืคืงืื ื ืืืื ืืคืชืืืช ื-DBMS ืฆึทื.
ืชืืื ืืช ืืืืื ื-DBMS ืืกืืจื ืืงืื ืคืชืื
ืคืื ืงืฆืืืช
ืกืื
ืืืื ืืืช ืกืืกืืืืช
ืืืงืืจืช
ืืื ื ืขื ืงืื ืืืงืืจ ืฉื ื ืืืื ืืคืื ืงืฆืืืช
RLS
ืืฆืฃ
ืืืจืงื
ืึดืกึฐืึธืจึดื
+
+
+
+
+
MsSql
ืึดืกึฐืึธืจึดื
+
+
+
+
+
ืึดืกึฐืึธืจึดื
+
+
+
+
ืกืืืืืช
PostgreSQL
ืืืคืฉื
ืกืืืืืช
ืกืืืืืช
-
+
ืกืืืืืช
MongoDb
ืืืคืฉื
-
+
-
-
ืืืื ื- MongoDB Enterprise ืืืื
ืืืืื ืจืืืงื ืืืืืืช ืืืื, ืืื ืืืฆื ืืื ืืื: ืืืืฆืจืื ืืกืืจืืื, ืืขืืืช ืืืืื ื ืคืชืจื ืืืจ ืืื ืจื, ืืงืื ืคืชืื, ืืืื, ืืฉืชืืฉืื ืืชืืกืคืืช ืืกืืืืืช ืืืืืื, ืืกืจืืช ืคืื ืงืฆืืืช ืจืืืช. , ืืคืขืืื ืฆืจืื ืืืืกืืฃ ืืฉืื. ืืืืืื, ืืืื ืืืช ืกืืกืืืืช - ื-PostgreSQL ืืฉ ืืจืืืืช ืฉืื ืืช (
ืื ืืขืฉืืช ืื ืืื ืื ืืช ืื ืฉืืชื ืฆืจืื ืืฉืื ืืงืื? ืืืืืื, ืืชื ืจืืฆื ืืืฉืชืืฉ ื-DBMS ืกืคืฆืืคื ืฉืืื ืื ืืช ืืคืื ืงืฆืืืช ืฉืืืงืื ืืืจืฉ.
ืื ืืชื ืืืื ืืืฉืชืืฉ ืืคืชืจืื ืืช ืฆื ืฉืืืฉื ืฉืขืืืืื ืขื DBMSs ืฉืื ืื, ืืืฉื, Crypto DB ืื Garda DB. ืื ืื ืื ื ืืืืจืื ืขื ืคืชืจืื ืืช ืืืืืืจ ืืืงืืื, ืื ืื ืืืืขืื ืขื GOSTs ืืื ืืืชืจ ืืืฉืจ ืืงืื ืคืชืื.
ืืืคืฉืจืืช ืืฉื ืืื ืืื ืืืชืื ืืช ืื ืฉืืชื ืฆืจืื ืืขืฆืื, ืืืืฉื ืืืฉื ืื ืชืื ืื ืืืฆืคื ื ืืืคืืืงืฆืื ืืจืืช ืืคืจืืฆืืืจื. ื ืืื, ืื ืืืื ืงืฉื ืืืชืจ ืขื GOST. ืืื ืืืืคื ืืืื, ืืชื ืืืื ืืืกืชืืจ ืืช ืื ืชืื ืื ืืคื ืืฆืืจื, ืืฉืื ืืืชื ื-DBMS, ืืื ืืืืืจ ืืืชื ืืืคืขื ื ืืืชื ืืคื ืืฆืืจื, ืืืฉ ืืจืืช ืืืคืืืงืฆืื. ืืื ืขื ืืืช, ืืฉืื ืืื ืืืฆื ืชืื ืขื ืืืืืืจืืชืืื ืืืื ืืืคืืืงืฆืื. ืืืขืชื ื, ืื ืฆืจืื ืืืืขืฉืืช ืืจืืช DBMS, ืื ืื ืืขืืื ืืืจ ืืืชืจ.
ืืื ืื ืืืฆื ืืจืืฉืื ื ื
ืื ืขืื ืืงืจืื ืื ืืฉื:
ืืืชืจ ื-Ceph: ืืืกืื ืืืืง ืขื ื ืฉื MCS .ืืืฆื ืืืืืจ ืืกื ื ืชืื ืื ืืคืจืืืงื ืื ืฉืื ืชืฆืืจื ืืืืืจ ืฉืื .
ืืงืืจ: www.habr.com