37.5. ÐÑавила и пÑава
Ð ÑезÑлÑÑаÑе пеÑепиÑÑÐ²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов ÑиÑÑемой пÑавил Postgres Pro обÑаÑение Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð½Ðµ к Ñем ÑаблиÑам/пÑедÑÑавлениÑм, к коÑоÑÑм обÑаÑалÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй запÑоÑ. С пÑавилами Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° Ñак же и запиÑÑ Ð² дÑÑгие ÑаблиÑÑ.
ÐÑавила пеÑезапиÑи не имеÑÑ Ð¾ÑделÑного владелÑÑа â владелÑÑем пÑавил пеÑезапиÑи, опÑеделÑннÑÑ Ð´Ð»Ñ Ð¾ÑноÑÐµÐ½Ð¸Ñ (ÑаблиÑÑ Ð¸Ð»Ð¸ пÑедÑÑавлениÑ), авÑомаÑиÑеÑки ÑÑиÑаеÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑÑого оÑноÑениÑ. СиÑÑема пÑавил Postgres Pro менÑÐµÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑÑандаÑÑного Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð° ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпом. РоÑноÑениÑм, иÑполÑзÑемÑм вÑледÑÑвие пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñавил, пÑовеÑÑеÑÑÑ Ð´Ð¾ÑÑÑп владелÑÑа пÑавила, но не полÑзоваÑелÑ, вÑполнÑÑÑего запÑоÑ. ÐÑо знаÑиÑ, ÑÑо полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ Ð¿Ñава, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе ÑолÑко Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑаблиÑам/пÑедÑÑавлениÑм, коÑоÑÑе он Ñвно ÑÐ¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ Ð² ÑÐ²Ð¾Ð¸Ñ Ð·Ð°Ð¿ÑоÑÐ°Ñ .
ÐапÑимеÑ, пÑедÑÑавим, ÑÑо Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÐµÑÑÑ ÑпиÑок ÑелеÑоннÑÑ Ð½Ð¾Ð¼ÐµÑов, некоÑоÑÑе из коÑоÑÑÑ Ð»Ð¸ÑнÑе, а некоÑоÑÑе должна знаÑÑ ÐµÐ³Ð¾ аÑÑиÑÑенÑка. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑÑоиÑÑ ÑледÑÑÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑиÑ:
CREATE TABLE phone_data (person text, phone text, private boolean);
CREATE VIEW phone_number AS
SELECT person, CASE WHEN NOT private THEN phone END AS phone
FROM phone_data;
GRANT SELECT ON phone_number TO assistant; ÐикÑо, кÑоме него (и ÑÑпеÑполÑзоваÑелей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
) не ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº ÑаблиÑе phone_data. Ðо Ñак как аÑÑиÑÑенÑке бÑло дано (GRANT) ÑооÑвеÑÑÑвÑÑÑее пÑаво, она ÑÐ¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑ SELECT Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ phone_number. СиÑÑема пÑавил пÑеобÑазÑÐµÑ SELECT из phone_number в SELECT из ÑаблиÑÑ phone_data. Так как полÑзоваÑÐµÐ»Ñ ÑвлÑеÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем phone_number, он же ÑÑиÑаеÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем пÑавила, доÑÑÑп на ÑÑение phone_data пÑовеÑÑеÑÑÑ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾, и вÑполнение запÑоÑа ÑазÑеÑаеÑÑÑ. ÐÑовеÑка пÑав доÑÑÑпа к phone_number Ñоже вÑполнÑеÑÑÑ, но пÑи ÑÑом пÑовеÑÑеÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, вÑполнÑÑÑий запÑоÑ, Ñак ÑÑо обÑаÑаÑÑÑÑ Ðº ÑÑÐ¾Ð¼Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑмогÑÑ ÑолÑко Ñам полÑзоваÑÐµÐ»Ñ Ð¸ его аÑÑиÑÑенÑка.
ÐÑава пÑовеÑÑÑÑÑÑ Ð¿Ñавило за пÑавилом. То еÑÑÑ, в даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑолÑко аÑÑиÑÑенÑка Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¸Ð´ÐµÑÑ Ð¾ÑкÑÑÑÑе ÑелеÑоннÑе номеÑа. Ðо она Ð¼Ð¾Ð¶ÐµÑ ÑоздаÑÑ Ð´ÑÑгое пÑедÑÑавление и даÑÑ Ð´Ð¾ÑÑÑп к Ð½ÐµÐ¼Ñ Ð²Ñем (Ñоли public), поÑле Ñего вÑе ÑмогÑÑ Ð²Ð¸Ð´ÐµÑÑ Ð´Ð°Ð½Ð½Ñе phone_number ÑеÑез пÑедÑÑавление аÑÑиÑÑенÑки. ЧÑо она не Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ, Ñак ÑÑо ÑоздаÑÑ Ð¿ÑедÑÑавление, коÑоÑое обÑаÑаеÑÑÑ Ðº phone_data напÑÑмÑÑ. (ÐообÑе она Ð¼Ð¾Ð¶ÐµÑ ÑÑо ÑделаÑÑ, но Ñакое пÑедÑÑавление не бÑÐ´ÐµÑ ÑабоÑаÑÑ, Ñак как пÑи лÑбой попÑÑке пÑоÑиÑаÑÑ ÐµÐ³Ð¾ доÑÑÑп к ÑаблиÑе бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑеÑÑн.) Ркак ÑолÑко полÑзоваÑÐµÐ»Ñ Ð·Ð°Ð¼ÐµÑиÑ, ÑÑо аÑÑиÑÑенÑка оÑкÑÑла доÑÑÑп к ÑÐ²Ð¾ÐµÐ¼Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ phone_number, он Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ÑиÑÑ ÐµÑ Ð¿Ñава ÑÑÐµÐ½Ð¸Ñ ÑÑого пÑедÑÑавлениÑ. Ð ÑезÑлÑÑаÑе вÑе ÑÑÐ°Ð·Ñ Ð¿Ð¾ÑеÑÑÑÑ Ð´Ð¾ÑÑÑп и к пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÑÑиÑÑенÑки.
ÐÐ¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ, ÑÑо ÑÐ°ÐºÐ°Ñ Ð¿ÑовеÑка «пÑавило-за-пÑавилом» пÑедÑÑавлÑÐµÑ ÑÑзвимоÑÑÑ, но ÑÑо не Ñак. ÐÑли Ð±Ñ Ð´Ð°Ð¶Ðµ ÑÑÐ¾Ñ Ð¼ÐµÑ
анизм не ÑабоÑал, аÑÑиÑÑенÑка могла Ð±Ñ ÑоздаÑÑ ÑаблиÑÑ Ñо ÑÑолбÑами как в phone_number и ÑегÑлÑÑно копиÑоваÑÑ ÑÑда даннÑе. Тогда ÑÑо бÑли Ð±Ñ ÐµÑ ÑобÑÑвеннÑе даннÑе и она могла Ð±Ñ Ð¾ÑкÑÑваÑÑ Ð´Ð¾ÑÑÑп к ним ÐºÐ¾Ð¼Ñ Ñгодно. ÐÑÑгими Ñловами, команда GRANT ознаÑÐ°ÐµÑ Â«Ð¯ довеÑÑÑ Ñебе». ÐÑли кÑо-Ñо, ÐºÐ¾Ð¼Ñ Ð²Ñ Ð´Ð¾Ð²ÐµÑÑеÑе, пÑоделÑÐ²Ð°ÐµÑ Ñакие опеÑаÑии, ÑÑÐ¾Ð¸Ñ Ð·Ð°Ð´ÑмаÑÑÑÑ Ð¸, возможно, лиÑиÑÑ ÐµÐ³Ð¾ доÑÑÑпа к даннÑм, пÑименив REVOKE.
ХоÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ ÑкÑÑÑÐ¸Ñ ÑодеÑжимого опÑеделÑннÑÑ
ÑÑолбÑов, как опиÑано вÑÑе, Ñ Ð¸Ñ
помоÑÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð½Ð°Ð´Ñжно ÑкÑÑÑÑ Ð´Ð°Ð½Ð½Ñе в невидимÑÑ
ÑÑÑокаÑ
, еÑли ÑолÑко не ÑÑÑановлен Ñлаг security_barrier. ÐапÑимеÑ, ÑледÑÑÑее пÑедÑÑавление небезопаÑно:
CREATE VIEW phone_number AS
SELECT person, phone FROM phone_data WHERE phone NOT LIKE '412%'; ÐÐ¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ, ÑÑо вÑÑ Ð² поÑÑдке, Ð²ÐµÐ´Ñ ÑиÑÑема пÑавил пÑеобÑазÑÐµÑ SELECT из phone_number в SELECT из phone_data и Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ Ð¾Ð³ÑаниÑиваÑÑее ÑÑловие, ÑÑÐ¾Ð±Ñ Ð²ÑдавалиÑÑ ÑолÑко ÑÑÑоки Ñ Ð¿Ð¾Ð»ÐµÐ¼ phone, наÑинаÑÑимÑÑ Ð½Ðµ Ñ 412. Ðо еÑли полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ ÑобÑÑвеннÑе ÑÑнкÑии, ÐµÐ¼Ñ Ð±ÑÐ´ÐµÑ Ð½Ðµ Ñложно заÑÑавиÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик вÑполнÑÑÑ ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¿ÐµÑед вÑÑажением NOT LIKE. ÐапÑимеÑ:
CREATE FUNCTION tricky(text, text) RETURNS bool AS $$
BEGIN
RAISE NOTICE '% => %', $1, $2;
RETURN true;
END;
$$ LANGUAGE plpgsql COST 0.0000000000000000000001;
SELECT * FROM phone_number WHERE tricky(person, phone); Так он ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð²Ñе имена и номеÑа ÑелеÑонов из ÑаблиÑÑ phone_data ÑеÑез ÑообÑÐµÐ½Ð¸Ñ NOTICE, Ñак как планиÑовÑик ÑеÑиÑ, ÑÑо лÑÑÑе вÑполниÑÑ Ð½ÐµÐ´Ð¾ÑогÑÑ ÑÑнкÑÐ¸Ñ tricky пеÑед более доÑогой опеÑаÑией NOT LIKE. Рдаже еÑли полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñава ÑоздаваÑÑ Ð½Ð¾Ð²Ñе ÑÑнкÑии, он Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
аÑак вÑÑÑоеннÑе ÑÑнкÑии. (ÐапÑимеÑ, многие ÑÑнкÑии пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ð²Ñ
однÑе знаÑÐµÐ½Ð¸Ñ Ð² ÑообÑениÑÑ
об оÑибкаÑ
.)
ÐодобнÑе ÑообÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð¸ на пÑавила Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ. ÐÑимениÑелÑно к пÑимеÑам пÑедÑдÑÑего Ñаздела, Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð² базе даннÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ ÐºÐ¾Ð¼Ñ-нибÑÐ´Ñ Ð´ÑÑÐ³Ð¾Ð¼Ñ Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ shoelace пÑава SELECT, INSERT, UPDATE и DELETE, а Ð´Ð»Ñ shoelace_log ÑолÑко SELECT. ÐейÑÑвие пÑавила, добавлÑÑÑее запиÑи в жÑÑнал, вÑÑ Ñавно бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ ÑÑпеÑно, а ÑÑÐ¾Ñ Ð´ÑÑгой полÑзоваÑÐµÐ»Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð²Ð¸Ð´ÐµÑÑ Ð·Ð°Ð¿Ð¸Ñи в жÑÑнале. Ðо он не ÑÐ¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ Ð¿Ð¾Ð´Ð´ÐµÐ»ÑнÑе запиÑи, Ñавно как и модиÑиÑиÑоваÑÑ Ð¸Ð»Ð¸ ÑдалÑÑÑ ÑÑÑеÑÑвÑÑÑие. Ð ÑÑом ÑлÑÑае Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ возможноÑÑи заÑÑавиÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик измениÑÑ Ð¿Ð¾ÑÑдок опеÑаÑий, Ñак как единÑÑвенное пÑавило, коÑоÑое обÑаÑаеÑÑÑ Ðº shoelace_log â ÑÑо безÑÑловнÑй INSERT. Рболее ÑложнÑÑ
ÑÑенаÑиÑÑ
ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ Ñак.
Ðогда ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑедÑÑавление обеÑпеÑивало заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок, к Ð½ÐµÐ¼Ñ Ð½Ñжно пÑимениÑÑ Ð°ÑÑибÑÑ security_barrier. ÐÑо пÑедоÑвÑаÑÐ¸Ñ ÑÑеÑÐºÑ ÑодеÑжимого ÑÑÑок из злонамеÑенно вÑбÑаннÑÑ
ÑÑнкÑий и опеÑаÑоÑов до Ñого, как ÑÑÑоки бÑдÑÑ Ð¾ÑÑилÑÑÑÐ¾Ð²Ð°Ð½Ñ Ð¿ÑедÑÑавлением. ÐапÑимеÑ, показанное вÑÑе пÑедÑÑавление бÑÐ´ÐµÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑм, еÑли ÑоздаÑÑ ÐµÐ³Ð¾ Ñак:
CREATE VIEW phone_number WITH (security_barrier) AS
SELECT person, phone FROM phone_data WHERE phone NOT LIKE '412%'; ÐÑедÑÑавлениÑ, ÑозданнÑе Ñ Ð°ÑÑибÑÑом security_barrier, могÑÑ ÑабоÑаÑÑ Ð³Ð¾Ñаздо медленнее, Ñем обÑÑнÑе. РвообÑе говоÑÑ, ÑÑо неизбежно: ÑамÑй бÑÑÑÑÑй план должен бÑÑÑ Ð¾ÑвеÑгнÑÑ, еÑли он Ð¼Ð¾Ð¶ÐµÑ ÑкомпÑомеÑиÑоваÑÑ Ð·Ð°ÑиÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð½Ð½Ñй аÑÑибÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ ÑÑÑанавливаеÑÑÑ.
ÐланиÑовÑик запÑоÑов Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÑÑе ÑвободÑ, ÑабоÑÐ°Ñ Ñ ÑÑнкÑиÑми, лиÑÑннÑми побоÑнÑÑ
ÑÑÑекÑов. Такие ÑÑнкÑии назÑваÑÑÑÑ Ð³ÐµÑмеÑиÑнÑми (LEAKPROOF) и вклÑÑаÑÑ ÑолÑко пÑоÑÑÑе ÑаÑÑо иÑполÑзÑемÑе опеÑаÑоÑÑ, напÑимеÑ, опеÑаÑоÑÑ ÑавенÑÑва. ÐланиÑовÑик запÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно вÑÑиÑлÑÑÑ Ñакие ÑÑнкÑии в лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа, Ñак как пÑи вÑзове иÑ
Ð´Ð»Ñ ÑÑÑок, невидимÑÑ
полÑзоваÑелÑ, не пÑоÑоÑиÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑиÑ
ÑÑÑокаÑ
. Ðолее Ñого, ÑÑнкÑии, коÑоÑÑе не пÑинимаÑÑ Ð°ÑгÑменÑÑ Ð¸Ð»Ð¸ коÑоÑÑм не пеÑедаÑÑÑÑ Ð°ÑгÑменÑÑ Ð¸Ð· пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð±Ð°ÑÑеÑом безопаÑноÑÑи, можно не помеÑаÑÑ ÐºÐ°Ðº LEAKPROOF, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ вÑÑли наÑÑжÑ, Ñак как они никогда не полÑÑÐ°Ñ Ð´Ð°Ð½Ð½Ñе из пÑедÑÑавлениÑ. РнапÑоÑив, ÑÑнкÑии, коÑоÑÑе могÑÑ Ð²ÑзваÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°Ñений аÑгÑменÑов (напÑимеÑ, в ÑлÑÑае пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° нолÑ), геÑмеÑиÑнÑми не ÑвлÑÑÑÑÑ, и могÑÑ Ð²ÑдаÑÑ ÑÑÑеÑÑвеннÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ невидимÑÑ
ÑÑÑокаÑ
, еÑли бÑдÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð¿ÐµÑед ÑилÑÑÑами ÑÑÑок.
Ðажно понимаÑÑ, ÑÑо даже пÑедÑÑавление, Ñозданное Ñ Ð°ÑÑибÑÑом security_barrier, оÑÑаÑÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑм ÑолÑко в Ñом ÑмÑÑле, ÑÑо ÑодеÑжимое невидимÑÑ
ÑÑÑок не бÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ Ð¿Ð¾ÑенÑиалÑно небезопаÑнÑм ÑÑнкÑиÑм. Ðо полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑобÑаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ невидимÑÑ
даннÑÑ
и дÑÑгими ÑпоÑобами; напÑимеÑ, он Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоанализиÑоваÑÑ Ð¿Ð»Ð°Ð½ запÑоÑа, полÑÑеннÑй Ñ EXPLAIN, или замеÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов Ñ ÑÑим пÑедÑÑавлением. ÐлоÑмÑÑленник Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ Ð¾Ð¿ÑеделÑннÑе вÑÐ²Ð¾Ð´Ñ Ð¾Ð± обÑÑме невидимÑÑ
даннÑÑ
или даже полÑÑиÑÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑаÑпÑеделении даннÑÑ
или наиболее ÑаÑÑÑÑ
знаÑениÑÑ
(Ñак как вÑÑ ÑÑо оÑÑажаеÑÑÑ Ð² ÑÑаÑиÑÑике Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑоÑа и, как ÑледÑÑвие, влиÑÐµÑ Ð½Ð° вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ð° или даже на вÑÐ±Ð¾Ñ Ð¿Ð»Ð°Ð½Ð°). ÐÑли возможноÑÑÑ Ð°Ñаки ÑеÑез ÑкÑÑÑÑе ÐºÐ°Ð½Ð°Ð»Ñ Ð²ÑзÑÐ²Ð°ÐµÑ Ð¾Ð¿Ð°ÑениÑ, веÑоÑÑно, бÑÐ´ÐµÑ ÑазÑмнÑм не пÑедоÑÑавлÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ доÑÑÑп к ÑÑим даннÑм.