42.4. ÐлобалÑнÑе даннÑе в PL/Tcl
Ðногда полезно имеÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе глобалÑнÑе даннÑе, ÑÐ¾Ñ ÑанÑемÑе Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð²Ñзовами ÑÑнкÑии или ÑовмеÑÑно иÑполÑзÑемÑе ÑазнÑми ÑÑнкÑиÑми. ÐÑо легко ÑделаÑÑ Ð² PL/Tcl, но еÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе огÑаниÑениÑ, коÑоÑÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ понимаÑÑ.
Ðо ÑообÑажениÑм безопаÑноÑÑи, PL/Tcl вÑполнÑÐµÑ ÑÑнкÑии, вÑзÑваемÑе некоÑоÑой ÑолÑÑ SQL в оÑделÑном инÑеÑпÑеÑаÑоÑе Tcl, вÑделенном Ð´Ð»Ñ ÑÑой Ñоли. ÐÑо пÑедоÑвÑаÑÐ°ÐµÑ ÑлÑÑайное или злонамеÑенное влиÑние одного полÑзоваÑÐµÐ»Ñ Ð½Ð° поведение ÑÑнкÑий PL/Tcl дÑÑгого полÑзоваÑелÑ. Ркаждом инÑеÑпÑеÑаÑоÑе бÑдÑÑ Ñвои знаÑÐµÐ½Ð¸Ñ Ð²ÑеÑ
«глобалÑнÑÑ
» пеÑеменнÑÑ
Tcl. Таким обÑазом, в двÑÑ
ÑÑнкÑиÑÑ
PL/Tcl бÑдÑÑ Ð¾Ð±Ñие глобалÑнÑе пеÑеменнÑе, ÑолÑко еÑли они вÑполнÑÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑолÑÑ SQL. РпÑиложении, вÑполнÑÑÑем код в одном ÑеанÑе Ñ ÑазнÑми ÑолÑми SQL (вÑзÑваÑÑем ÑÑнкÑии SECURITY DEFINER, иÑполÑзÑÑÑем ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET ROLE и Ñ. д.) Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ñвно пÑедпÑинÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе меÑÑ, ÑÑÐ¾Ð±Ñ ÑÑнкÑии могли ÑазделÑÑÑ Ñвои даннÑе. ÐÐ»Ñ ÑÑого ÑнаÑала ÑÑÑановиÑе Ð´Ð»Ñ ÑÑнкÑий, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвоваÑÑ, одного владелÑÑа, а заÑем задайÑе Ð´Ð»Ñ Ð½Ð¸Ñ
ÑвойÑÑво SECURITY DEFINER. РазÑмееÑÑÑ, пÑи ÑÑом нÑжно позабоÑиÑÑÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑÑи ÑÑнкÑии не могли ÑделаÑÑ Ð½Ð¸Ñего непÑедÑÑмоÑÑенного.
ÐÑе ÑÑнкÑии PL/TclU, вÑзÑваемÑе в одном ÑеанÑе, вÑполнÑÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ инÑеÑпÑеÑаÑоÑом Tcl, коÑоÑÑй, конеÑно, оÑлиÑаеÑÑÑ Ð¾Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑа(ов), иÑполÑзÑемого Ð´Ð»Ñ ÑÑнкÑий PL/Tcl. ÐоÑÑÐ¾Ð¼Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑе даннÑе ÑÑнкÑий PL/TclU авÑомаÑиÑеÑки ÑÑановÑÑÑÑ Ð¾Ð±Ñими. ÐÑо не ÑÑиÑаеÑÑÑ ÑгÑозой безопаÑноÑÑи, Ñак как вÑе ÑÑнкÑии PL/TclU вÑполнÑÑÑÑÑ Ð½Ð° одном ÑÑовне довеÑиÑ, а именно ÑÑовне ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
ЧÑÐ¾Ð±Ñ Ð·Ð°ÑиÑиÑÑ ÑÑнкÑии PL/Tcl Ð¾Ñ Ð½ÐµÐ¿ÑеднамеÑенного влиÑÐ½Ð¸Ñ Ð´ÑÑг на дÑÑга, каждой из ниÑ
пÑедоÑÑавлÑеÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ð°Ñ Ð¿ÐµÑеменнаÑ-маÑÑив ÑеÑез ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ upvar. ÐлобалÑнÑм именем ÑÑой пеÑеменной ÑвлÑеÑÑÑ Ð²Ð½ÑÑÑеннее Ð¸Ð¼Ñ ÑÑнкÑии, а в каÑеÑÑве локалÑного вÑбÑано GD. ÐеÑеменнÑÑ GD ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑÑоÑннÑÑ
внÑÑÑенниÑ
даннÑÑ
ÑÑнкÑии. ÐбÑÑнÑе глобалÑнÑе пеÑеменнÑе Tcl ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑолÑко Ð´Ð»Ñ Ð·Ð½Ð°Ñений, коÑоÑÑе пÑедназнаÑÐµÐ½Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ð´Ð»Ñ ÑовмеÑÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÑколÑкими ÑÑнкÑиÑми. (ÐамеÑÑÑе, ÑÑо маÑÑÐ¸Ð²Ñ GD ÑвлÑÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑми ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного инÑеÑпÑеÑаÑоÑа, Ñак ÑÑо они не наÑÑÑаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, опиÑаннÑе вÑÑе.)
ÐÑполÑзование GD демонÑÑÑиÑÑеÑÑÑ Ð² пÑимеÑе spi_execp, пÑиведÑнном ниже.