MySQL дэх шифрлэлт: Мастер түлхүүрийг ашиглах

Сургалтын шинэ элсэлт эхлэхийг хүлээж байна "Мэдээллийн сан" бид MySQL дээр шифрлэлтийн тухай цуврал нийтлэлүүдийг үргэлжлүүлэн нийтэлсээр байна.

MySQL дэх шифрлэлт: Мастер түлхүүрийг ашиглах

Энэ цувралын өмнөх нийтлэлд (MySQL дэх шифрлэлт: Түлхүүр хадгалах газар) бид түлхүүрийн дэлгүүрүүдийн талаар ярилцсан. Энэ нийтлэлд бид мастер түлхүүрийг хэрхэн ашигладаг талаар авч үзэх бөгөөд дугтуйны шифрлэлтийн давуу болон сул талуудын талаар ярилцах болно. 

Дугтуйны шифрлэлтийн цаад санаа нь шифрлэхэд ашигладаг түлхүүрүүдийг (хүснэгтийн зайн түлхүүр) өөр түлхүүрээр (мастер түлхүүр) шифрлэсэн байдаг. Хүснэгтийн орон зайн түлхүүрүүдийг үнэндээ өгөгдлийг шифрлэхэд ашигладаг. Графикаар үүнийг дараах байдлаар илэрхийлж болно.

MySQL дэх шифрлэлт: Мастер түлхүүрийг ашиглах

Мастер түлхүүр нь түлхүүрийн дэлгүүрт, хүснэгтийн зайн түлхүүрүүд нь шифрлэгдсэн хүснэгтүүдийн толгой хэсэгт байрлана (хүснэгтийн зайны 0-р хуудсанд). 

Дээрх зураг дээр:

  • Хүснэгт А 1-р түлхүүрээр шифрлэгдсэн (Түлхүүр 1). Түлхүүр 1 нь мастер түлхүүрийг ашиглан шифрлэгдсэн бөгөөд А хүснэгтийн толгой хэсэгт шифрлэгдсэн байдлаар хадгалагдана.

  • Хүснэгт В 2-р түлхүүрээр шифрлэгдсэн (Түлхүүр 2). Түлхүүр 2 нь маскер түлхүүрийг ашиглан шифрлэгдсэн бөгөөд B хүснэгтийн толгой хэсэгт шифрлэгдсэн байдлаар хадгалагдана.

  • Тиймээ.

Сервер А хүснэгтийн шифрийг тайлах шаардлагатай үед дэлгүүрээс мастер түлхүүрийг авч, А хүснэгтийн толгой хэсгээс шифрлэгдсэн түлхүүр 1-ийг уншиж, 1-р түлхүүрийг тайлдаг. Шифрлэгдсэн түлхүүр 1 нь серверийн санах ойд хадгалагдаж, А хүснэгтийн шифрийг тайлахад ашиглагддаг. .

InnoDB

InnoDB-д шифрлэлт, шифрлэлт нь I/O түвшинд хийгддэг. Өөрөөр хэлбэл, хуудас нь диск рүү орохын өмнөхөн шифрлэгдсэн бөгөөд дискнээс уншсаны дараа шууд шифрлэгддэг.

InnoDB дээр шифрлэлт нь зөвхөн хүснэгтийн түвшинд ажилладаг. Анхдагч байдлаар бүх хүснэгтүүд тусдаа хүснэгтийн зайд үүсгэгддэг (хүснэгтийн зайд файл). Өөрөөр хэлбэл, зөвхөн нэг хүснэгт агуулж болох хүснэгтийн орон зай бий болно. Хэдийгээр та үндсэн хүснэгтийн зайд хүснэгт үүсгэж болно (ерөнхий хүснэгтийн орон зай). Гэхдээ ямар ч тохиолдолд хүснэгт нь үргэлж зарим хүснэгтийн зайд байдаг. Шифрлэлт нь хүснэгтийн түвшний түвшинд хийгддэг тул энэ нь бүрэн шифрлэгдсэн эсвэл шифрлэгдсэн байдаг. Өөрөөр хэлбэл, та хүснэгтийн үндсэн орон зайд байгаа хүснэгтүүдийн зөвхөн хэсгийг шифрлэх боломжгүй. 

Хэрэв та ямар нэг шалтгааны улмаас хүснэгт тутамд файлыг идэвхгүй болгосон бол бүх хүснэгтүүд системийн хүснэгтийн зайд үүсгэгдэнэ. IN MySQL-д зориулсан Percona сервер Та innodb хувьсагчийг ашиглан системийн хүснэгтийн орон зайг шифрлэх боломжтойsysширээний зайшифрлэх эсвэл шифрлэлтийн хэлхээг ашиглах, гэхдээ энэ нь туршилтын шинж чанар хэвээр байна. MySQL-д энэ байхгүй.

Үргэлжлүүлэхийн өмнө бид мастер түлхүүр ID-ийн бүтцийг авч үзэх хэрэгтэй. Энэ нь UUID, KEY-ээс бүрдэнэID болон угтвар "INNODBKey". Энэ нь иймэрхүү харагдаж байна: INNODBKey-UUID-KEYҮнэмлэх.

UUID нь шифрлэгдсэн хүснэгтийн орон зайтай серверийн uuid юм. түлхүүрID бол зүгээр л өсөн нэмэгдэж буй үнэ цэнэ юм. Та анх үндсэн түлхүүр үүсгэх үед KEYID нь 1. Түлхүүрийг эргүүлэх үед шинэ мастер түлхүүр үүсгэх үед KEYID = 2 гэх мэт. Бид энэ цувралын дараагийн нийтлэлүүдэд мастер түлхүүрийн эргэлтийн талаар дэлгэрэнгүй ярих болно.

Одоо бид мастер түлхүүр танигч ямар байдгийг мэдсэн тул шифрлэгдсэн хүснэгтийн орон зайн толгой хэсгийг харцгаая. Хүснэгтийн орон зайг шифрлэх үед шифрлэлтийн мэдээллийг толгой хэсэгт нэмнэ. Энэ нь дараах байдалтай харагдаж байна.

MySQL дэх шифрлэлт: Мастер түлхүүрийг ашиглах

KEYID бол ТҮЛХҮҮРБидний аль хэдийн хэлэлцсэн мастер түлхүүр ID-ийн ID. UUID нь серверийн uuid бөгөөд мөн үндсэн түлхүүр танигчид ашиглагддаг. TABLESPACE KEY - серверээс санамсаргүй байдлаар үүсгэсэн 256 битээс бүрдэх хүснэгтийн зайны түлхүүр. Эхлэх вектор (IV, эхлүүлэх вектор) нь мөн санамсаргүй байдлаар үүсгэгдсэн 256 битээс бүрдэнэ (хэдийгээр энэ нь 128 бит байх ёстой). IV нь AES шифрлэлт болон тайлалтыг эхлүүлэхэд ашиглагддаг (256 битээс зөвхөн 128 нь ашиглагддаг). Төгсгөлд нь TABLESPACE KEY болон IV-ийн CRC32 шалгах нийлбэр байна.

Энэ бүх хугацаанд би толгой хэсэгт шифрлэгдсэн хүснэгтийн зайн түлхүүр байгаа гэж хэлснээр бага зэрэг хялбаршуулсан. Үнэн хэрэгтээ хүснэгтийн зайн түлхүүр болон эхлүүлэх вектор нь мастер түлхүүрийг ашиглан хамтдаа хадгалагдаж, шифрлэгдсэн байдаг. Хүснэгтийн орон зайн түлхүүр болон эхлүүлэх векторыг шифрлэхээс өмнө тэдгээрт CRC32-ыг тооцдог гэдгийг санаарай.

CRC32 яагаад хэрэгтэй вэ?

Товчхондоо, гол түлхүүр хүчинтэй эсэхийг шалгахын тулд. Хүснэгтийн зайн түлхүүр болон эхлүүлэх векторын шифрийг тайлсны дараа хяналтын нийлбэрийг тооцоолж, толгой хэсэгт хадгалагдсан CRC32-тай харьцуулна. Хэрэв шалгах нийлбэр таарч байвал бид зөв мастер түлхүүр болон хүснэгтийн зайн түлхүүртэй болно. Үгүй бол хүснэгтийн зай байхгүй гэж тэмдэглэгдсэн байна (бид үүнийг тайлж чадахгүй хэвээр байна).

Та асууж болно: түлхүүрүүдийн баталгаажуулалт ямар үед хийгддэг вэ? Хариулт нь сервер хэзээ эхлэх болно. Шифрлэгдсэн хүснэгтүүд / хүснэгтүүдтэй сервер нь эхлүүлэх үед UUID, KEY-г уншдагТолгой хэсгээс ID-г гаргаж, үндсэн түлхүүрийн ID-г үүсгэдэг. Дараа нь түлхүүрийн оосороос шаардлагатай мастер түлхүүрийг авч, tablespace түлхүүрийн кодыг тайлж, шалгах нийлбэрийг шалгана. Дахин хэлэхэд, шалгах нийлбэр таарч байвал бүх зүйл эмх цэгцтэй байна, үгүй ​​- хүснэгтийн зай байхгүй гэж тэмдэглэгдсэн байна.

Хэрэв та энэ цувралын сүүлийн өгүүллийг уншвал (MySQL дэх шифрлэлт: Түлхүүр хадгалах газар), дараа нь серверийн түлхүүрийн дэлгүүрийг ашиглах үед сервер нь зөвхөн эхлүүлэх үед түлхүүр танигчийн жагсаалтыг хүлээн авдаг, илүү нарийвчлалтай, түлхүүр ID болон хэрэглэгчийн ID-г хүлээн авдаг, учир нь энэ хос түлхүүрийг өвөрмөц байдлаар тодорхойлдог. Миний одоо хэлэх гэж байгаа зүйл бол сервер эхлүүлэх үед хүснэгтийн зайн түлхүүрүүдийг тайлж болох эсэхийг шалгахад шаардлагатай бүх түлхүүрүүдийг авдаг. Тэгэхээр яагаад серверийн хадгалалтын хувьд эхлүүлэх үед зөвхөн түлхүүрийг ачаалдагID болон хэрэглэгчid ба бүх түлхүүр биш үү? Учир нь танд бүх түлхүүр хэрэггүй байж болно. Энэ нь голчлон мастер түлхүүрийн эргэлттэй холбоотой юм. Мастер түлхүүрийг хайрцагт эргүүлэхэд шинэ үндсэн түлхүүр үүсдэг боловч хуучин түлхүүрүүд устдаггүй. Иймд та серверийн түлхүүрийн санд серверт шаардлагагүй, тиймээс сервер ажиллаж эхлэхэд буцааж авах боломжгүй олон түлхүүртэй байж болно.

Мастер түлхүүр ашиглан шифрлэлтийн давуу болон сул талуудын талаар бага зэрэг ярих цаг болжээ. Хамгийн том давуу тал нь танд зөвхөн нэг шифрлэлтийн түлхүүр (мастер түлхүүр) хэрэгтэй бөгөөд энэ нь таны шифрлэгдсэн мэдээллээс тусдаа хадгалагдах болно. Энэ нь серверийг хурдан эхлүүлэх, хадгалах санг бага болгож удирдахад хялбар болгодог. Мөн цорын ганц мастер түлхүүрийг сэргээхэд хялбар байдаг.

Гэсэн хэдий ч мастер түлхүүрийн шифрлэлт нь нэг том сул талтай: хүснэгтийн зайг tablespace_key-ээр шифрлэсэн бол энэ нь үргэлж ижил түлхүүрээр шифрлэгдсэн хэвээр байна. Мастер түлхүүрийн эргэлт энд тус болохгүй. Энэ нь яагаад сул тал юм бэ? MySQL нь үндсэн файлыг гацааж, үүсгэхэд хүргэдэг алдаатай гэдгийг бид мэднэ. Үндсэн файл нь серверийн санах ойн дамп агуулж байгаа тул энэ нь шифрлэгдсэн хүснэгтийн зайн түлхүүрийг агуулж болно. Бүр муу нь, шифрлэгдсэн хүснэгтийн түлхүүрүүд нь санах ойд хадгалагддаг бөгөөд тэдгээрийг диск рүү сольж болно. Эдгээр файлууд болон своп хуваалтад хандахын тулд танд root зөвшөөрөл хэрэгтэй тул энэ нь сул тал биш гэдгийг та хэлж чадна. Тиймээ. Гэхдээ үндэс нь хэсэг хугацаанд л хэрэгтэй. Шифрийг тайлсан хүснэгтийн зайн түлхүүрт хандсан хүн root хандалтгүйгээр ч гэсэн өгөгдлийг тайлахад үргэлжлүүлэн ашиглах боломжтой. Нэмж дурдахад дискийг хулгайлж, своп / үндсэн файлуудыг гуравдагч талын хэрэгслийг ашиглан унших боломжтой. TDE-ийн зорилго нь диск хулгайд алдсан ч унших боломжгүй болгох явдал юм. IN MySQL-д зориулсан Percona сервер шинээр үүсгэсэн түлхүүрүүдээр хүснэгтийн зайг дахин шифрлэх боломжтой. Энэ функцийг шифрлэлтийн хэлхээ гэж нэрлэдэг бөгөөд үүнийг бичих үед туршилтын хэвээр байна.

Хичээлийн талаар илүү ихийг мэдэж аваарай

Цааш унших:

Эх сурвалж: www.habr.com

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster