ααααααααααααα»αααΊ Denis Rozhkov αααα»αααΆαααααΆααααααα’αα·αααααααααααα·ααΈαα
αααα»αα αα»α Gazinformservice αααα»ααααα»αααα·ααα
α’ααααααααααααΌαααΆααααα
αα‘αΎααααααα’ααααΎαα»αααααααΆαα
α’αααααααΉαααΆαααΈαααααα
- αα·ααΈααΆααΆααΆααααααΆααα
- ααΎα’αααΈααΆααααααααααααααααΆα αα·ααααααααααααΆα’αααΈααααααα»αααΎαα‘αΎααα ααΎαααααααΌαααααΆααα·αααααα α αΎαααααΆαααα ααΆα
- ααααααΆαααΆααα·αααααααα αααα»α Database αααα½αααΆ αα·ααα αα αααα·ααααΆα’αααΈαααααααα’αΆα ααααΆααααααΆααααΆααααα
ααΆαα»ααααααΈαααα»ααααα·ααΆα 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 αα αα·
187.695 αα αα·
tps αα½αααΆααααΆαααααΆααααααΆαααααα
58.168112
53.278062
tps ααααα·αααΆαααααα
αΌαααΆααααααΆααααααααααΎα
64.084546
58.725846
αααΈααΈααΌ
24%
28%
ααααα·ααααα·ααΆαααΆααα’ααααααΌαααΆαα’αα»αααααααα»αααΆααααααΆαααααα½α
ααΆαααΊααααΆαααΆααααα
6.722 αα αα·
6.342 αα αα·
tps αα½αααΆααααΆαααααΆααααααΆαααααα
1587.657278
1576.792883
tps ααααα·αααΆαααααα
αΌαααΆααααααΆααααααααααΎα
1588.380574
1577.694766
αααΈααΈααΌ
17%
21%
αα ααααααα»ααααααΊ α₯αααα·αααα SSL ααΊα’αΆα αααααααααα ααΉαααα α»ααααα»αααΆαααΆαααααα ααααα·αααΎα ααα½ααα·αααααααααααΆααααααααΊααααΆαα ααααΆαααΆαα’αΆα αα»αααααΆα ααααα·αααΎααΎααααααΎαααΆααααααΆαααα½ααααα»ααα½αααααα·ααααα·ααΆα (αααααΊααααααΆαα ααΆααααααΆααΆααααααΆααααααΌαααΆαα ααααααααααΆαα’αααααααΎααααΆαα) α’αααααΆαα ααα½αα αααΎαααααΆααααααΆαα/ααΆαααααΆα α αααααααΆααα’αΆα ααΉαααααΆαααααα·α α αααααΊααΆα’αΆα ααΆαα αΆαα·αααααααΆαααα α»αααααΆαα’αα»αααα αααααΆαααΆαααΆααααα ααΆααα»αααααΆααΊαα·αααααΌα ααΆααα·αααααΎααΆαααΆαααΆααααααα
ααΌαα αααΆαααΆααΆαααΆααα»ααααααααααΆααααΆαα ααααα·αααΎα’αααααααααααααααααααα·ααααα·ααΆαα α’ααααααα»αααααΎααΆααααα»ααααααααα½α α¬αααα»ααααααααααααααΆα αααα’αΆα αααααΆαα ααααΆαααααΌαααΆαα αααΆαααΎααΆααααααΎαααΆααααααΆααααΈαα½ααα
ααΎαααΆαααααΈαα½ααα ααααααααΎαααααΆαα Zabbix αα αααα»αααααααΏαα»αα α·ααα αααααΊ md5 αα·αααααΌαααΆααα·αα·ααα αα·αα αΆαααΆα αααΆαααΆααααααααααΆααααα αααααΆααααα’αα·αα·ααααΆαααααΎαα»αα±ααααΎααααααααααααααΆαα md5 α ααΆααααΎα±αααααΈααΈααΌααΆαααααα»αααααα α αΎαααααΎαααΆαααααΆααα α»αα ααΎαα αΆααααααΎαααααααααα·ααΈααΎααααΈαααααΎαααααα·αααααΆαα αααααααααΆααα½ααααα»αα αααααααααααααΆααααα’αΆα ααΎαααΆαα αααααααα αΆααΊ α’αα»ααααααΆαααΉααααααΉααααααΆα αααααΎα VLAN ααΆα ααααα‘αααααααΆαα DBMS ααααααααΆααααααααΎααααΈααααΎα±ααααΆα αααΆααααΆα’αααααΆαααα»αααααΆααααΈααααααααΆ αα·ααα»αααΆααααααααααΆααα α’αααααα’αΆα αααααΎαααααα·αααααΆαααΆααααααααΆααααααααααΆααααΎααααΈααΆαααααααααΆαα αααΆααα αααααΎαααΆααααααααααΆαα ααα»αααα ααΆααΌαα ααΆαααααΎααααΆαααα·ααΈααΆααααααααααααααΆ ααΆααααααααααΆαααααααΆαααααααααΎαααΆα αα·αααΆαααΆαα±ααααΆαααΆααα·α αΆαααΆααΎαααααΆααΆααααααα ααααα ααΆααΆααααα»αααααΌααααααααααΆαααΈααα (αααααααΉα) αααααΆαα DBMS α
ααα ααααΈααααα·ααααΆαα αα αααα»ααααααααααΆααα½αα ααα½α ααΌααααΈααααΆααααααααααΆαααα·α αα½α αααα»αααΆααααααααααΆααα’αΆα αααααΆαααααΆαααααΆαααααααααααα αΎαααΆαα·αααα’αα ααααααααΆα αααΆαααααα αααα’αα»αααααα αααα»αααα·αααααααα»αααααα
ααααααααααααααΆα
αααααααα’αΆα αα·αααααΉααα DBMS ααα»αααααααα αααααααααΊα’αααΈααΆαααα½αααΆαααααααΆαα’αααΈα’αααΈααααααα»αααΎαα‘αΎααα αααα»ααααααααααααα ααΆα’αΆα ααΆ database firewall α¬ααααααααααααα·ααααα·ααΆαααα DBMS ααααΌαααΆααααααΎαα‘αΎαα
αα αααα»αααααα·ααα ααααΆαααΆαα·ααααααα DBMSs α’αααΈααααααααΆαααΊααα’ααΆαα½αααΉαααΆαααααΎααααααα ααα»αααααα αααα»ααααααααΎαα αα - αα·ααααααααα αααααΆα’αααΈααα PostgreSQL ααΆαα
- αααααβα ααα»βααααΆαααΎα - ααΆαβα αΌαβαααα»αβααΆαβα αΌα;
- αααααααααααα pgaudit - ααααα·αααΎααΆααααααααΆααααΆαααΎααα·ααααααααααΆαααααααΆααα’ααα α’αααα’αΆα ααααΎααΆααααααααΆα ααααα‘ααααααααααααΆααααα αΆαα½αα ααα½αα
ααααααααΎαααΆαααΆααααααα»αααΈααα’αΌα
msgstr "ααΆαβαααααααΆβααα ααααΈαααααααΆαααβααΌαααααΆαβα’αΆα βααααΌαβααΆαβαααααβαααβααααααβαααααααΆβαααααααΆαβααΆαα½α log_statement = all α
αααα’αΆα ααα½αααααΆααααααΆααααΆααααα½ααα·αα·ααα αα·αααΆαααααΎααααΆαααααααααα ααα»αααααα·ααααααααααα·αααααααααΆααααα’α·ααααααΆααααααΆααΆαααΆααααααΆααααααααααααααα
ααΆαα·ααααααααααΆαααααααα»αααΆαααΆααααααΈααααααα·ααααα·ααΆαααΆααα’αααααααΆαα’αα»αααααα ααΎααΌαααααΆααα·ααααααα
ααΆαααα½αααΆαααααααΆααααααααααα ααααΈαααααααΆαααααΆααααΆαααααα αΆααα’αΆααααααα αααααααααα
ααΆααααααααΆααΆααααααααΆααααα αΆαααΈα’αααΈαααα’αααααααΎααΆαααααΎαα»α ααααααααα pgAudit αααααααΎααααααΆααααα’α·αααα’αααΈαααααΆαααΎαα‘αΎααα ααααααααΌαααααΆααα·ααααααααΆαααααΎαααΆααααα½αα
ααΆα§ααΆα ααα ααααααααα ααααΆα αααααααααααΆααααΆααΆααΆαααΆααααΆαααα½αααααΌαααΆααααααΎααα αααα»ααααα’α½α ααααΆαα―αααΆαα
αααα’αΆα α αΆααααΌα ααΆαα·α αα ααΆαααΆαααααα½αααΆαα½αααΉαααΆαααααΎαααααααααΌαααααΆα αα·α grep ααα»ααααα α»ααααΆαααΆααΎα’αααααααΌαααΆααααα αΆαααΆαα½αα§ααΆα αααααα (αααα ααααΆα ααα‘α)α
ααααΎ$$
α
αΆααααααΎα
ααααα·ααααα· 'αααααΎαααΆαααΆαα
αΌαααΆααΆα' || 'ant_table (id int)';
END$$;
ααΆααααααααΆαααααααΆαααΉααααααα±ααα’αααααΌαα ααα»α αααα
αααααα ααα»α ααα
ααααΈαααααααΆαααα ααααΎ $$
α
αΆααααααΎα
ααααα·ααααα· 'αααααΎαααΆαααΆαα
αΌαααΆααΆα' || '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 important_table (id INT)
αα·αααααΉααααααα»α DO ααααΌαααΆααααααααΆααα»ααααααα ααα»ααααααααΆαα’ααααααααααααα CREATE TABLE αααααΆαααααααααα ααααΈαααααααΆααα ααααααααααα» αα·ααααααααα αααααααΎα²ααααΆααααααααααΆααααααΆααααα½αα
αα ααααααααααΆααα ααααΈαααααααΆααα SELECT αα·α DML pgAudit α’αΆα ααααΌαααΆαααααααα ααΆααααααααααΎααααΈαααααααΆααΆαα»ααΆα ααααα‘αααααααΆααααααΆααααααααΈαα½αααααααααα αααα»αααα ααααΈαααααααΆαααα
ααααΆαααΆααααααααΌαααΆαααΆαααΆαααΎααααΈαααααααααα
ααααΈαααααααΆαααααΆααα’ααααααααααΆααΆαααΆααααΆαααα½α(
ααΎααΆααΉααααααΆαααααααααΎαααΆααααα DBMS αααΆαααΌα ααααα ?
αααααααΎαααΆαααΆαααααΎαααααααΆαα½αααΉαααΆαααΎαααααααααααααα α αΎαααΎαααΆααΎααΆαα’αααΈααΎαα‘αΎαα ααααααΆαα’αα»αααα PostgreSQL α αααααΎαααΆααααααααΆαα·ααααααα’αα·ααααΆαααααΆαααααΆαααΆααααααααΆααα’ααα
ααΎαααααΆααααααΌαααααΎαααααααΆαα’αααΈαα αααα»αα―αααΆαααααααα ααΆααααααααααααα α’αααΈαααααααΆαααααα»αααΊααααΌαααΎαααααααααΆααααα α»α 5 ααΎααααΈααα½αααΆαααααααΆαα’αα·ααααΆα
postgresql.conf
log_destination = 'stderr'
loggging_collector = ααΎα
log_truncate_on_rotation = ααΎα
log_rotation_age = 1d
log_rotation_size = 10MB
log_min_messages = ααααΆααααα α»α α₯
log_min_error_statement = ααααΆααααα α»α α₯
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_wait = ααΎα
log_replication_commands = ααΎα
log_temp_files = 0
log_timezone = 'α’αΊααα»α/ααΌααααΌ'
αα ααΎ PostgreSQL DBMS αααααΆααααΆαααΆαααααα 1 CPU, 2,8 GHz, RAM 2 GB, HDD 40 GB ααΎαααααΎααααααααα»αα ααα½αααΈαααααααΎααΆααααααααΆα
$ 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 αα·ααΆααΈ
RAM
24%
40%
αααΈααΈααΌ
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 αα·α CPU ααΉααααα»ααα αααααΆαα’αααααααΌαααΆααααααΎαα―αααΆααααααααα ααααααα½αα±ααααααααααΆααααααααα αααα»αααα·αααΆαα
αα ααααααα ααα½αααααΆααααααΆααααΎαα‘αΎα ααΆααααααΆααααΎαααΆαααΉαααΆαααααααΆαααααΊαααααα·α α
αα αααα»αααΆααΈααααααααααΆααααααααααΆααΆαααααα·ααΆαααΆαααααα αααα
- ααΆααα·ααααααα αααΎα;
- ααΆαααααΎαααααααααΊααααΌαααΆααα·αααααΉαααααΆαααα syslog αα αααα»α SIEM ααα»ααααααα ααα»ααααααααΆααα αααα»αα―αααΆααααααα ααααα·αααΎααΆαα’αααΈαα½αααΎαα‘αΎαα αααα syslog ααααΌαααααΆαα―αααΆααα αα·αααΌαααααΆααα·ααααααααααα·ααααααααααΌαααΆααααααΆαα»αα
- ααααΌαααΆαααααΎααΆα ααααα‘αααααααΆααααααααα ααΎααααΈαα»αα±ααααααααααΆαααΆα I/O αααααααΆααααΌαααΆαααααααα αααΎα
- ααΆααΎαα‘αΎαααααα»ααααα·αααααα·αα»αααααααΆαααααΌαααΆααααααααΆα GOST αα αααααααΈαααααααα½αααααΆαααΆαα’ααααααααΆαααααα
ααΆαααΉααααααΉαααΆαα αΌαααααΎαα·αααααα
ααΌααααα‘ααααΎααα αα αααα·ααααΆαααααααΌαααΆαααααΎααΎααααΈααΆαααΆααα·αααααα αα·αα αΌαααααΎααΆαα αααα»α DBMSs ααΆαα·ααααααα αα·ααααααααΎαα αα α
α’αααΈαααα’αααα’αΆα ααααΎααΆααΌαα α
- ααΆαα’αα·αααααΈα αα·αααΆαααΆααα ααααααααΈαα·αα·ααΈ αα·ααα»αααΆα (αα»α) - αααααΊααΆα§ααααα αα·αα§αααααααααΎααααΆααααΆα ααααα‘αααααααααΎα±ααααΌααααα’αΆα α’αΆαααΆααα·αα’αΆα α’αΆαααΆαα αα·ααααα αΎα ααΆαα·αα’αΆα ααααΆααααααΌα α¬ααααααα‘αΎααα·αααΆαααα αα·ααΈααΆαααααααααα½αααΆαααααΌαααΆαααΆαααΆααααΆαα αα ααΆαααα ααΆα DBMS - αααααα·ααααΆααααΆαααΉααααααΉαα’αΆααααΆααααα α¬αααααα·ααααΆααΆαα’αα»ααααΆαααααΌαααΆαα’αα·αααααΈααααΆαααΆααααΆαααα ααααα·αααΈαα·αα·ααΈ αα·ααα»αααΆαα
- ααΆααααααααΆαααΎαααΎααααα·ααααααααΆααα½α (RLS) ααΊααΆααααααα’αααααααΎααααΆαααααααααααΆααΎαααΆααΆααα½α ααα»αααααααΆαααΆααααααααααΆαααα½αααααα αααα»αααΆ αααααΊα’αααΈαα½ααα·αα’αΆα αααα αΆααααααααΆααααΆαααα ααααα·ααα½ααααααΆαααα
- ααΆαααααααα½ααα·αααααααααααΆααααα αΆα (ααΆααα·αααΆαα) ααΊααΆααααααα’αααααααΎααααΆαααα αααα»ααα½ααααα½αααααΆααΆαααΎαααΎααα·αααααα α¬ααΆααααααααΆααααΆα αααααΊαααααΆααα’αααααααΎααααΆαααα½αα ααα½αααααααΆαααΉαααααΌαααΆααα·αα αα αα αααα·ααααΆαααααααΆααΎα’αααααααΎααααΆααααΆαα½αααααΌαααΆααααα αΆαααΈα’αααΈαααααα’ααααΎααααα·αααααΆαα αΌαααααΎαααααα½αααα
- αα»ααααα·ααΆα DBA/Application DBA/DBA access control ααΆααΆαααΆαααΉααααααΉαααΆαα αΌαααααΎ DBMS αααα½αα―α αααααΊαα»ααααα·αααααα·αα»αααααααΆαα’αΆα ααααΌαααΆααααααα ααααΈα’ααααααααααααααΌαααααΆααα·αααααα αα·αα’αααααααααααααααααα·ααΈα ααΆααα αα αααα·ααααΆαααααααα·α αα½α αα αααα»ααααααααΎαα αα ααα»ααααααΆαα αααΎααα αααα»α DBMSs ααΆαα·αααααααα αα½αααααααΌαααΆααα ααααααααΆαα’αααααααΎααααΆααααΆα αααΎααααααΆααα·αααα·α αΌαααααΎαααΆαααΈαααααααααα½αα―αα
- ααΆαααΉααααααΉαααΆαα αΌαααααΎα―αααΆααα ααααα·αααααααααα―αααΆαα α’αααα’αΆα ααααααα·αααα· αα·ααα·αααα·α αΌαααααΎαα ααΆαααα ααΌα ααααα’ααααααααααααααΈαα½ααα’αΆα α αΌαααααΎααΆααααα·ααααααα αΆαααΆα αααα»αααααα
- ααΆαα αΌαααααΎααΆααΆαααααα·α αα αα·αααΆααααα’αΆαα’αααα αα αΆα - αα αα αααα·ααααΆααΆαααααααααααααΌαααΆαααααΎααααΆααααΆααα
- ααΆαα’αα·αααααΈαααΈα α»ααααα α»ααααααααΆααααΈ 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
ααΆα‘α·ααΆααααααααααΌαααΆαααΎαα
ααααααααΆαα | α’αααααα‘ | α’ααααα α’
ββ+ββ-+ββ-
α‘ | α‘ | α‘
α‘ | α‘ | α‘
α‘ | α‘ | α‘
...
α©α©α§ | α©α©α§ | α©α©α§
α©α©α§ | α©α©α§ | α©α©α§
α©α©α§ | α©α©α§ | α©α©α§
α‘α α α | α‘α α α | α‘α α α
(α‘α α α αα½α)
αααααααΆα 1,386 ms
ααΆαααααΎαααΎαααΈααΆααΆααααααΆααα»αααΆαα’αα·αααααΈαα
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
ααΆα‘α·ααΆααααααααααΌαααΆαααΎαα
ααααααααΆαα | αα·ααααΈα | αα·ααααΈα
ββ+ββββββ+ββββ
α‘ | x1 | x31
α‘ | x2 | x32
α£ | x3 | x33
...
α‘ | x999 | x393939
α£ | x1000 | x31303030
(α‘α α α αα½α)
αααααααΆα 50,203 ms
ααααααβααβααα:
αααααααΆαααΆαα’αα·αααααΈα
Pgcrypto (αα·ααααΈα)
ααααΌ 1000 αα½α
1,386 ms
50,203 ms
αααΈααΈααΌ
15%
35%
RAM
+ 5%
ααΆαβα’αα·αααααΈαβααΆαβα₯αααα·ααβααααΆααβααΎβααΆαβα’αα»ααααα ααΆα’αΆα ααααΌαααΆαααααΎαααΎαααΆαααααααΆααΆαααΎαα‘αΎαα αΆααααΆααααΈααααα·ααααα·ααΆαααααΆααα·ααααΈααα·αααααααααααΆαα’αα·αααααΈα (α αΎαααΆααα·ααααΈαααΆααααααΆαα ααααααΌαααΆααα»αααααααααα·ααααΆααααα’ααα) ααΆαααΆαααααΆαααααΆαααα αααααΊαααα·αααααΆαα’αα·αααααΈααα½αααααΆααα’αααααααΆααα·αααααααα½αα ααα½αααΊ fraught ααΆαα½αααΉαααΆαααα α»αααααΆαα’αα»ααααα
ααααααΆαααΆααααα ααΆαα’αα·αααααΈααα·ααααααΆααααΆααααΆαααααΎαααααααααααΆααααα αΆααΆααα’αααααααα αα·αααααααααααΆααα·ααααΈα αα·ααααα·ααααΈαααα‘α»ααααααααΎαααΆααα·ααααΈα αα·ααααααΌααα·ααααααααΆαααΈααΆαααα ααΎαααΆαααΈαααα ααΌα αααα ααα’αΆα ααααΌαααΆαααααΆααα αΆαααααα’ααααααααΆααα·αααα·α αΌαααααΎαααΆααααααααα ααΆαααααΆαααΈαααααΌαααααΆααα·αααααα ααΌα ααΆα’ααααααααααααααααααααα
αα ααααααααΆαααΌααααα½ααααααΆαααα½αααααΆααααΌααααααΆααα’αααααααΎααααΆααααΆααα’αα (αααααΈααΆαα·αααααααααΆααααΆααα’ααααααα ααα»αααααααααΆααα’αα·αα·αααααααα»αααΆαααααα) ααααα·ααααααααα’ αα·αααααΉαααααΌααααααα αααα αΎαααΆααΌαα ααα»ααααα½αααα αΆααααααΎαααααΎααΆαα’αα·αααααΈαααΈα α»ααααα αα αα αααα»α DBMS αα½αααααΆαα αΆααααααΎααα·α αΆαααΆαααααΎααααααΆααααΆαα’αα·αααααΈααα·αααααααα ααΎααααααααΆαααΈαααααα αα·αααααααααΆαααΈααα α αΎαααααΆαααααα»ααααααααααΆααααα αΆααααα½α - ααα·αααααΆα ααααα‘ααααααααααααΆααααααααααααααα ααΎ DBMS α αα ααα
αααααααα·ααααα»ααααα·ααΆααα αααα»α DBMS ααΆαα·ααααααα αα·ααααααααΎαα αα
α’αα»αααα
ααΆα
αααααΆαααααΆααααααααΆαα
ααααααα
ααΆαααΆαααΆαααΌααααααααααΈαα·αα·ααΈ αα·ααα»αααΆα
RLS α
ααΆαα’ααΈαααααΈα
αααα»αα αα»α Oracle
ααΆαα·ααααααα
+
+
+
+
+
MsSql
ααΆαα·ααααααα
+
+
+
+
+
ααΆαα·ααααααα
+
+
+
+
ααααααααααα
PostgreSQL
αααα₯ααα·ααααα
ααααααααααα
ααααααααααα
-
+
ααααααααααα
MongoDb
αααα₯ααα·ααααα
-
+
-
-
ααΆααα
αααα»ααααα»αα αα»α MongoDB ααααα»ααααα
ααΆααΆααααααΊαα
ααααΆαααΈαααααα ααα»ααααααααΆαααΆαααΊααΌα
αααα αα
αααα»αααα·αααααΆαα·ααααααα αααα αΆαα»ααααα·ααΆαααααΌαααΆααααααααΆαα’ααααααααααΆααΌααα
αααα»ααααααααΎαα
αα ααΆαααα½ααααααααααααα·ααΈαααααααα½αα
ααα½αααααΌαααΆαααααΎααααΆαααααααΆαααα»ααααα·ααΆα αα»αααΆαααΆα
αααΎαααααΌαααΆαααΆααα αααααααα’αααααααΌαααααααα’αααΈαα½αα α§ααΆα ααα αααααΆαααααΆααααααααΆαα - PostgreSQL ααΆααααααααααααααααααααααΆααΆα
αααΎα (
α’αααΈαααααααΌαααααΎααααα·αααΎα’ααααα·αααΆαα’αααΈαααα’αααααααΌαααΆααααααααΈαααααα? α§ααΆα ααα α’αααα ααααααΎ DBMS ααΆααααΆααααααα·αααΆααα»αααΆααααα’αα·αα·ααααΆαααΆαα
αααααΆααααα’αααα’αΆα ααααΎαααααααααΆαααΆααΈααΈααΈαααααααΎααΆαααΆαα½α DBMSs ααααααααααΆ α§ααΆα ααα Crypto DB α¬ Garda DB α ααααα·αααΎααΎααααα»ααα·ααΆαα’αααΈαααααααααΆαααΈααααααααα»ααααα»αααααα½αααααΉαα’αααΈ GOSTs αααααΎαααΆααα αααα»ααααααααΎαα αα α
αααααΎαααΈααΈαααΊααααΌααααααα’αααΈαααα’αααααααΌαααΆαααααααα½αα―α α’αα»ααααααΆαα αΌαααααΎαα·αααααα αα·αααΆαα’αα·αααααΈααααα»ααααααα·ααΈαα ααααα·αααΈαα·αα·ααΈα αα·αααΆααΉαααΆαααααα·ααΆαααΆαα½α GOST α ααα»ααααααΆααΌαα α’αααα’αΆα ααΆαααα·ααααααααΆααααααΌαααΆα ααΆααααΆαα αααα»α DBMS αααααΆααααααΆαααααΆ α αΎααα·ααααΈαααΆααΆααααααΌαααΆα ααααΉαααααα·ααααααα·ααΈα αααα»ααααααΆαα½αααααΆααα αα·αααααΆααα’αααΈαααααααα’αααααΉαααΆαααΆααααα½ααααααααΆαααΆααααααα αααα»ααααααα·ααΈα ααΆααααα·αααααααΎα ααααα½αααααααΎαα ααααα·α DBMS αααααααΆααΉαααααΎαααΆαααΏαααΆααα»αα
αααΆαααΆααααααααααΌαααΆααααα αΆαααΆααΎαααααΌααα
ααΎααΆαα’αααΈααααααααααΌαα’αΆαααΎαααααΆααα:
α αααΎαααΆα Cephα ααΆααααα»ααααα»αααα MCS .ααααααααΎαααΎαααΌαααααΆααα·αααααααααααΆαααααααα ααΌα ααααα’ααααα·αα αΆαααΆα αααααΎαααΎααααααααααα .
ααααα: www.habr.com