แแฃแ แกแแ แแฎแแแ แฉแแ แแชแฎแแแก แแแฌแงแแแแก แแแแแแแแจแ
แแแแแชแแแแ แแแแญแแแ แแแแ แแแจแแคแแ แ (TDE) แแแแแฉแแแ
MySQL Keyring
Keyring แแ แแก แแแแแแแขแแแ, แ แแแแแแแช แกแแ แแแ แก แกแแจแฃแแแแแแก แแซแแแแก แแแแแฎแแแแก, แจแแฅแแแแก แแ แฌแแจแแแแก แแแกแแฆแแแแแ แแแแแแแแ แแ แคแแแแจแ (keyring_file) แแ แแแกแขแแแชแแฃแ แกแแ แแแ แแ (แ แแแแ แแชแแ HashiCorp Vault). แแแกแแฆแแแแแ แงแแแแแแแแก แแแแฎแแแ แแแแแแแแ แแแแ, แ แแแ แแแแฉแฅแแ แแก แแแแ แแแซแแแแ.
แแแแแแแขแแแ แจแแแซแแแแ แแแแงแแก แแ แแแขแแแแ แแแ:
- แแแแแแแแ แแแ แกแแชแแแ. แแแแแแแแแ, แแแแแแฃแ แ แคแแแแ (แแแแก แฉแแแ แแฃแฌแแแแแ แคแแแแแ แแแคแฃแซแแแแฃแ แแแกแแฆแแแก).
- แแแกแขแแแชแแฃแ แ แจแแแแฎแแ. แแแแแแแแแ, Vault Server (แแแแก แกแแ แแแ แแ แแแคแฃแซแแแแฃแ แแแกแแฆแแแก แแฃแฌแแแแแ).
แแก แแแแชแแแแแแแแ แแแแจแแแแแแแแแแ, แ แแแแแ แแแฎแกแแแ แแแแก แกแฎแแแแแกแฎแแ แขแแแแแ แแแแแ แแแแกแฎแแแแแแฃแแแ แแฅแชแแแแแ, แแ แ แแฎแแแแ แแแกแแฆแแแแแแก แจแแแแฎแแแกแ แแ แแแฆแแแแกแแก, แแ แแแแ แแแแ แแแจแแแแแกแแก.
แคแแแแแก แจแแแแฎแแแก แแแแแงแแแแแแกแแก, แแแจแแแแแกแแก, แแแฎแกแแแ แแแแก แแแแแ แจแแแแแ แกแ แแขแแแ แแแแ แฅแแจแจแ: แแแกแแฆแแแแก ID, แแแกแแฆแแแแก แแแแฎแแแ แแแแแ, แแแกแแฆแแแแก แขแแแ แแ แแแแแ แแแกแแฆแแแ.
แกแแ แแแ แแก แแแฆแแแแแก แจแแแแฎแแแแแจแ (แ แแแแ แแชแแ Vault Server), แแแจแแแแแกแแก แแขแแแ แแแแ แแฎแแแแ แแแกแแฆแแแแก id แแ แแแกแแฆแแแแก แแแแฎแแแ แแแแแ, แแแแขแแ แงแแแแ แแแกแแฆแแแแก แแแฆแแแ แแ แแแแแแแก แแแจแแแแแก. แแแกแแฆแแแแแ แแแ แแแชแ แแขแแแ แแแแ. แแแฃ, แแแกแแฆแแแ แแแแแ แแขแแแ แแแแ Vault-แแแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แแก แ แแแแฃแ แแ แกแแญแแ แแ. แฉแแแแขแแแ แแแแก แจแแแแแ, แแแกแแฆแแแ แแแแฎแแแ แแแฎแกแแแ แแแแจแ, แ แแแ แแแแแแแแจแ แแ แแแกแญแแ แแแก แแแกแแ แฌแแแแแ Vault แกแแ แแแ แแแ TLS แแแแจแแ แแแแ. แจแแแแแแ, แแแแแ แจแแแฎแแแแ แ แ แแแคแแ แแแชแแแก แจแแแชแแแก แแแกแแฆแแแแก แแแฆแแแแแจแ.
แซแแ แแแแแ แแแคแแ แแแชแแ แจแแแชแแแก แจแแแแแแก:
- แแแกแแฆแแแแก ID - แแแกแแฆแแแแก แแแแแขแแคแแแแขแแ แ, แแแแแแแแแ:
INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
- แแแกแแฆแแแแก แขแแแ โ แแแกแแฆแแแแก แขแแแ แแแแแงแแแแแฃแแ แแแจแแคแแ แแก แแแแแ แแแแแก แกแแคแฃแซแแแแแ, แจแแกแแซแแ แแแแจแแแแแแแแแ: โAESโ, โRSAโ แแ โDSAโ.
- แแแกแแฆแแแแก แกแแแ แซแ โ แแแกแแฆแแแแก แกแแแ แซแ แแแแขแแแจแ, AES: 16, 24 แแ 32, RSA 128, 256, 512 แแ DSA 128, 256 แแ 384.
- แแแแฎแแแ แแแแแ - แแแกแแฆแแแแก แแคแแแแแแ. แแฃ แแแกแแฆแแแ แแ แแก แกแแกแขแแแ, แแแแแแแแแ, Master Key, แแแจแแ แแก แแแแ แชแแ แแแแแ. แแฃ แแแกแแฆแแแ แแฅแแแแแ keyring_udf-แแก แแแแแงแแแแแแ, แแแจแแ แแก แแแแ แแแแกแแแฆแแ แแแก แแแกแแฆแแแแก แแคแแแแแแก.
- แแแแแ แแแกแแฆแแแ
แแแกแแฆแแแ แชแแแกแแฎแแ แแแแแขแแคแแชแแ แแแฃแแแ แฌแงแแแแแ: key_id, แแแแฎแแแ แแแแแ.
แแกแแแ แแ แกแแแแแก แแแแกแฎแแแแแแแแ แแแกแแฆแแแแแแก แจแแแแฎแแแกแ แแ แฌแแจแแแจแ.
แคแแแแแก แจแแแแฎแแ แฃแคแ แ แกแฌแ แแคแแ. แจแแแซแแแแ แแคแแฅแ แแ, แ แแ แแแกแแฆแแแแก แแแฆแแแแ แฃแแ แแแแ แแ แแฎแแ แฌแแ แก แคแแแแแก แแแกแแฆแแแก, แแแแ แแ แแ แ, แแฅ แฃแคแ แ แแแขแ แฎแแแแ. แ แแแแกแแช แฎแแแแ แคแแแแแก แจแแแแฎแแแก แแแแแคแแแแชแแ, แแแ แแแแแ แแฅแแแแแ แแแแแ แจแแแแแ แกแแก แกแแ แแแแ แแ แแกแแ. แแแฅแแแ, แคแแแแก แแ แฅแแ my_biggest_secrets, แแแจแแ แกแแ แแแแ แแ แแกแแ แแฅแแแแ my_biggest_secrets.backup. แจแแแแแแ, แฅแแจแ แแชแแแแแ (แแแกแแฆแแแแแ แแแแขแแแ แแ แฌแแแจแแแแ) แแ แแฃ แงแแแแแคแแ แ แฌแแ แแแขแแแแ แแแกแ แฃแแแ, แฅแแจแ แแแแแแแแแแแ แคแแแแแ. แแจแแแแ แจแแแแฎแแแแแแจแ, แ แแแแ แแชแแ แกแแ แแแ แแก แฃแแแแ แแกแแแ, แจแแแแซแแแแ แแแฎแแ แแก แกแแ แแแแ แแ แคแแแแ. แกแแ แแแแ แแ แคแแแแ แฌแแแจแแแแ แแแแแแจแแแแก แฉแแขแแแ แแแแก แจแแแแแ (แฉแแแฃแแแแ แแ, แกแแ แแแ แแก แแแแแขแแแ แแแแก แจแแแแแ).
แกแแ แแแ แแก แกแแชแแแจแ แแแกแแฆแแแแก แจแแแแฎแแแก แแ แฌแแจแแแกแแก, แกแแชแแแ แฃแแแ แแแฃแแแแจแแ แแแก MySQL แกแแ แแแ แก แแ แซแแแแแแแแ "แแแแแแแแ แแแกแแฆแแแ" / "แแแแแฎแแแ แแแกแแฆแแแแก แฌแแจแแ".
แแแแแ แแแแฃแแ แฃแแแแ แกแแ แแแ แแก แแแจแแแแแก แกแแฉแฅแแ แแก. แแแ แแ แแแแกแ, แ แแ แแแจแแแแแก แกแแฉแฅแแ แแแ แแแแแแแแก แแฎแแแแก แแแแแ แกแแ แแแคแ, แแกแแแ แฉแแแแแ แกแแแแแฎแ, แแฃ แ แแแแแแ แแแแแแจแแก แแแแฆแแแ แแญแแ แแแแแ แแแจแแแแแกแแก. แ แ แแฅแแ แฃแแแ, แแก แแแแกแแแฃแแ แแแแ แแแแจแแแแแแแแแแ แกแแ แแแ แแก แจแแแแฎแแแกแแแแก. แแแจแแแแแกแแก แกแแ แแแ แ แแแแฌแแแแก แ แแแแแ แแแกแแฆแแแแ แกแแญแแ แ แแแจแแคแ แฃแแ แชแฎแ แแแแแแกแแแแก/แแแแแแแก แกแแแ แชแแกแแแแก แแ แแแฎแแแก แแแกแแฆแแแก แแแฎแกแแแ แแแแแแ. "แกแฃแคแแ" แกแแ แแแ แแ Master Key แแแจแแคแแ แแ, แฃแแแ แแ แกแแแแแแแก แแ แแ แซแแ แแแแแ แแแกแแฆแแแ, แ แแแแแแช แฃแแแ แแงแแก แแฆแแแฃแแ แกแแชแแแแแแ. แแฃแแชแ, แจแแแซแแแแ แกแแญแแ แ แแแฎแแแก แแแกแแฆแแแแแแก แฃแคแ แ แแแแ แ แแแแแแแแ, แแแแแแแแแ, แ แแแแกแแช แกแแ แแแแ แแ แกแแ แแแ แ แแฆแแแแแแก แกแแ แแแแ แแ แแกแแก แซแแ แแแแแ แกแแ แแแ แแแแ. แแกแแ แจแแแแฎแแแแแแจแ แฃแแ แฃแแแแแงแแคแแแ แฃแแแ แแงแแก แซแแ แแแแแ แแแกแแฆแแแแก แ แแขแแชแแ. แแก แฃแคแ แ แแแขแแแฃแ แแ แแฅแแแแ แแแแฎแแแฃแแ แแแแแแแ แกแขแแขแแแแจแ, แแฃแแชแ แแฅแแ แแแแแ แแฆแแแแจแแ, แ แแ แกแแ แแแ แก, แ แแแแแแช แแงแแแแแก แ แแแแแแแแ แแแแแแ แแแแแแจแก, แจแแแซแแแแ แชแแขแ แแแขแ แแ แ แแแกแญแแ แแแก แแแจแแแแแก, แแแแกแแแฃแแ แแแแ แกแแ แแแ แแก แแฎแแ แแก แแแกแแฆแแแแแแก แจแแแแฎแแแกแแก.
แแฎแแ แแแแแ แแแกแแฃแแ แแ แชแแขแ แแแขแ keyring_file-แแ. แ แแแแกแแช แแ แแแแฃแจแแแแแแ keyring_file, แแ แแกแแแ แแแแแขแแ แแกแแแแ, แ แแแแ แจแแแแแแฌแแแแแแ keyring_file แชแแแแแแแแแ แกแแ แแแ แแก แแฃแจแแแแแกแแก. 5.7-แจแ แจแแแแฌแแแแ แแแแฎแแ แชแแแแแ แคแแแแฃแ แ แกแขแแขแแกแขแแแแก แกแแคแฃแซแแแแแ, แ แแช แแ แแงแ แแแแแแฃแ แ แแแแแฌแงแแแขแ แแ 8.0-แจแ แแแ แจแแแชแแแแ SHA256 แกแแแแแขแ แแแ แฏแแแแ.
แแแ แแแแแ แแแจแแแแแกแแก keyring_file, แแแแแแแแแแแ แคแแแแแก แกแขแแขแแกแขแแแ แแ แแแแจแแแแ แฏแแแ, แ แแแแแแแช แแฎแกแแแก แกแแ แแแ แก แแ แชแแแแแแแแแ แแแแแแงแแแแแ แแฎแแแแ แแ แจแแแแฎแแแแแจแ, แแฃ แแกแแแ แแแแฎแแแแ. แ แแแแกแแช แคแแแแ แแชแแแแแ, แกแแแแแขแ แแแ แฏแแแ แแแแแฎแแแแแ.
แฉแแแ แฃแแแ แแแแแแฎแแแแ แแ แแแแแ แแแแฎแแ แแแกแแฆแแแแก แกแแ แแแคแแแแแ แแแแแแจแแ แแแแ. แแฃแแชแ, แแ แแก แแแแแ แแ แแ แแแแจแแแแแแแแแ แแแแ, แ แแแแแแช แฎแจแแ แแ แแแแแฌแงแแแฃแแ แแ แแ แแกแฌแแ แแ แแ แแก แแแแแแฃแแ: แแแกแแฆแแแแแแก แแแแแแ แแแ แกแแ แแแ แแแแ.
แฒ แแก แแแฃแแแกแฎแแแ? แแแแแแฃแ แกแแ แแแ แก (แแแแแแแแแ, Percona แกแแ แแแ แก) แแแแกแขแแ แจแ แฃแแแ แฐแฅแแแแแก แชแแแแ แแแแแแ แแแแ Vault แกแแ แแแ แแ, แ แแแแแจแแช Percona แกแแ แแแ แแ แฃแแแ แจแแแแแฎแแก แแแแแกแ แแแกแแฆแแแแแ. แกแแชแแแจแ แจแแแแฎแฃแแ แแแแแแฃแแ แซแแ แแแแแ แแแกแแฆแแแ แจแแแชแแแก Percona แกแแ แแแ แแก GUID-แก แแแก แแแแแขแแคแแแแขแแ แจแ. แฒ แแขแแ แแ แแก แแก แแแแจแแแแแแแแแ? แฌแแ แแแแแแแแแ, แ แแ แแฅแแแ แแแฅแแ แแฎแแแแ แแ แแ Vault แกแแ แแแ แ แแ แงแแแแ Percona แกแแ แแแ แ แแแแกแขแแ แจแ แแงแแแแแก แแ แชแแแแแฃแ Vault แกแแ แแแ แก. แแ แแแแแแ แแจแแแ แแ แฉแแแก. แแฃ Percona-แก แงแแแแ แกแแ แแแ แ แแแแแแงแแแแแแ แแแแแแ แแแแแแจแก แฃแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แแแแก แแแ แแจแ, แ แแแแ แแชแแ id = 1, id = 2 แแ แ.แจ., แแแจแแ แแแแกแขแแ แจแ แงแแแแ แกแแ แแแ แ แแแแแแงแแแแแแ แแแแแ แแแแแแ แแแแแแจแก. แ แแกแแช GUID แแแแแแแแแ แแ แแก แแแแกแฎแแแแแแ แกแแ แแแ แแแก แจแแ แแก. แ แแขแแ แฃแแแ แแแกแแฃแแ แแ แกแแ แแแ แแแก แจแแ แแก แแแกแแฆแแแแแแก แแแแแแ แแแแแ, แแฃ แฃแแแแแแฃแ แ GUID แฃแแแ แแ แกแแแแแก? แแ แแก แแแแแ แแ แแ แแแแฃแแ - keyring_udf. แแ แแแแฃแแแ, แแฅแแแแก แกแแ แแแ แแก แแแแฎแแแ แแแแแก แจแแฃแซแแแ แจแแแแแฎแแก แแแกแแฆแแแแแ Vault แกแแ แแแ แแ. แแ แแแแแแ แฉแแแแแ, แ แแแแกแแช แแแแฎแแแ แแแแแ แฅแแแแก แแแกแแฆแแแแก แกแแ แแแ แแ1, แแแแแแแแแ, แแ แจแแแแแ แชแแแแแแก แจแแฅแแแแก แแแกแแฆแแแ แแแแแ ID-แแ แกแแ แแแ 2-แแ, แแแแแแแแแ:
--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
--1 ะทะฝะฐัะธั ััะฟะตัะฝะพะต ะทะฐะฒะตััะตะฝะธะต
--server2:
select keyring_key_store('ROB_1','AES',"543210987654321");
1
แแแแชแแแ. แแ แแแ แกแแ แแแ แ แแงแแแแแก แแ แแกแ แแ แแแแแ Vault Server-แก, แแ แฃแแแ แแแฎแแแก keyring_key_store แคแฃแแฅแชแแ แกแแ แแแ 2-แแ? แกแแแแขแแ แแกแแ, แ แแ แแฃ แชแแแแแแ แแแแแแก แแแแแแแแแก แแ แ แกแแ แแแ แแ, แแแแฆแแแ แจแแชแแแแแก:
--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
select keyring_key_store('ROB_1','AES',"543210987654321");
0
แแแ แแแแแ, ROB_1 แฃแแแ แแ แกแแแแแก.
แฏแแ แแแแ แ แแแแแแแแแ แแแแกแฏแแแแ. แ แแแแ แช แแแ แ แแแฅแแแ, keyring_vault แแ แกแฎแแ แแแกแแฆแแแแก แแแแแแแขแ แแแแฎแแแก แงแแแแ แแแกแแฆแแแแก ID-แก แแแฎแกแแแ แแแแจแ. แแกแ แ แแ, แแฎแแแ แแแกแแฆแแแแก แจแแฅแแแแก แจแแแแแ ROB_1 แแแแขแแแ server1-แก แแ แแ แแแกแแฆแแแแก Vault-แจแ แแแแแแแแแก แแแ แแ, แแแกแแฆแแแแช แแแแขแแแ แฅแแจแก. แแฎแแ, แ แแแแกแแช แแแแ แแ แแชแแแแแแ แแแแแ แแแกแแฆแแแแก แแแแแขแแแแก, keyring_vault แแแแฌแแแแก แแ แแก แแฃ แแ แ แแแกแแฆแแแ แฅแแจแจแ แแ แฃแจแแแแก แจแแชแแแแแก.
แแแ แแแ แจแแแแฎแแแแแจแ แกแแขแฃแแชแแ แแแแกแฎแแแแแแฃแแแ. Server1-แกแ แแ Server2-แก แแฅแแ แชแแแแ แฅแแจแ. ROB_1-แแก แแแแแขแแแแก แจแแแแแ แแแกแแฆแแแแก แฅแแจแ แกแแ แแแ แแ1 แแ Vault แกแแ แแแ แแ, แแแกแแฆแแแแก แฅแแจแ แกแแ แแแ 2-แแ แกแแแฅแ แแแแแแแฃแแแ. แกแแ แแแ 2-แแ แฅแแจแจแ แแ แแ แแก ROB_1 แแแกแแฆแแแ. แแแ แแแแ, ROB_1 แแแกแแฆแแแ แแฌแแ แแแ keyring_key_store-แแ แแ Vault แกแแ แแแ แแ, แ แแแแแแช แ แแแแฃแ แแ แแแแแฌแแ แก (!) แฌแแแ แแแแจแแแแแแแแก. แแฎแแ Vault แกแแ แแแ แแ ROB_1 แแแกแแฆแแแ แแ แแก 543210987654321. แกแแแแขแแ แแกแแ, แ แแ Vault แกแแ แแแ แ แแ แแแแแแแก แแกแแ แฅแแแแแแแแก แแ แแแแแแแ แแแแแฌแแ แก แซแแแ แแแแจแแแแแแแแก.
แแฎแแ แฉแแแ แแฎแแแแแ, แ แแขแแ แจแแแซแแแแ แแงแแก แแแแจแแแแแแแแแ แกแแ แแแ แแก แแแงแแคแ Vault-แจแ - แ แแแแกแแช แแงแแแแแ keyring_udf-แก แแ แแกแฃแ แ แจแแแแแฎแแ แแแกแแฆแแแแแ Vault-แจแ. แ แแแแ แแแแแฆแฌแแแ แแ แแแแชแแแแแแแแแก Vault แกแแ แแแ แแ?
Vault-แจแ แแแงแแคแแก แแ แ แแแ แแ แกแแแแแก. แแฅแแแ แจแแแแซแแแแ แจแแฅแแแแ แกแฎแแแแแกแฎแแ แกแแแแแขแแแ แฌแแ แขแแแแแ แแแแแแฃแแ แกแแ แแแ แแกแแแแก, แแ แแแแแแงแแแแ แกแฎแแแแแกแฎแแ แแแแแแแแ แแแแแ แกแแแแแขแแแ แฌแแ แขแแแจแ. แแก แกแแฃแแแแแกแแ แแแฃแกแขแ แแ แแแฃแแแ แแแแแแแแแแแ. แแแแแ, แแแ แแแ แ แแแจแ แแแแแแฎแแแแ แแแแแแ แแแแก แชแแแแแฃแ แฌแแ แขแแแแแก:
--server1:
vault_url = http://127.0.0.1:8200
secret_mount_point = server1_mount
token = (...)
vault_ca = (...)
--server2:
vault_url = http://127.0.0.1:8200
secret_mount_point = sever2_mount
token = (...)
vault_ca = (...)
แแฅ แฎแแแแแ, แ แแ server1 แแ server2 แแงแแแแแแ แกแฎแแแแแกแฎแแ แกแแแแแขแแแ แฌแแ แขแแแแแก. แแแแแแแแแก แแแงแแคแแกแแก, แแแแคแแแฃแ แแชแแ แแกแ แแแแแแงแฃแ แแแ:
--server1:
vault_url = http://127.0.0.1:8200
secret_mount_point = mount_point/server1
token = (...)
vault_ca = (...)
--server2:
vault_url = http://127.0.0.1:8200
secret_mount_point = mount_point/sever2
token = (...)
vault_ca = (...)
แแ แจแแแแฎแแแแแจแ, แแ แแแ แกแแ แแแ แ แแงแแแแแก แแแแแ แกแแแแแขแแแ แฌแแ แขแแแก "mount_point", แแแแ แแ แกแฎแแแแแกแฎแแ แแแแแแแแก. แ แแแแกแแช แแฅแแแ แจแแฅแแแแ แแแ แแแ แกแแแแฃแแแแก server1-แแ แแ แแแแก แแแแแงแแแแแแ, Vault แกแแ แแแ แ แแแขแแแแขแฃแ แแ แฅแแแแก "server1" แแแ แแฅแขแแ แแแก. แกแแ แแแ 2แกแแแแก แงแแแแแคแแ แ แแกแแแแกแแ. แ แแแแกแแช แแฅแแแ แฌแแจแแแ แแแแ แกแแแแฃแแแแก mount_point/server1-แจแ แแ mount_point/server2-แจแ, Vault แกแแ แแแ แ แแกแแแ แฌแแจแแแก แแ แแแขแแแแแแแก. แแฃ แแงแแแแแ แแแแแแแแแก แแแแชแแแแแแแแแก, แแฅแแแ แฃแแแ แจแแฅแแแแ แแฎแแแแ แแ แแ แกแแแแแขแแแ แฌแแ แขแแแ แแ แจแแชแแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแ แแกแ, แ แแ แกแแ แแแ แแแแ แแแแแแงแแแแ แชแแแแ แแแแแแแแ. แกแแแแแขแแแ แฌแแ แขแแแ แจแแแซแแแแ แจแแแฅแแแแก HTTP แแแแฎแแแแแก แแแแแงแแแแแแ. CURL-แแก แแแแแงแแแแแแ แแก แจแแแซแแแแ แแแแแแแแก แแกแ:
curl -L -H "X-Vault-Token: TOKEN" โcacert VAULT_CA
--data '{"type":"generic"}' --request POST VAULT_URL/v1/sys/mounts/SECRET_MOUNT_POINT
แงแแแแ แแแแ (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) แจแแแกแแแแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแแก แแแ แแแแขแ แแแก. แ แ แแฅแแ แฃแแแ, แจแแแแซแแแแ แแแแแแงแแแแ Vault แฃแขแแแแขแแแ แแแแแแก แแแกแแแแแแแแแ. แแแแ แแ แฃแคแ แ แแแแแแแ แกแแแแแขแแแ แฌแแ แขแแแแก แจแแฅแแแแก แแแขแแแแขแแแแชแแ. แแแแแแแแแแ, แ แแ แแก แแแคแแ แแแชแแ แแฅแแแแแแแก แกแแกแแ แแแแแ แแฅแแแแ แแ แแ แกแแ แแแก แจแแแแแ แกแขแแขแแแแจแ แจแแแฎแแแแแแ.
แฒฌแแแแแแฎแ แแแขแ:
แฌแงแแ แ: www.habr.com