5.7. ÐÑава
Ðогда в базе даннÑÑ ÑоздаÑÑÑÑ Ð¾Ð±ÑекÑ, ÐµÐ¼Ñ Ð½Ð°Ð·Ð½Ð°ÑаеÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ. ÐладелÑÑем обÑÑно ÑÑановиÑÑÑ ÑолÑ, Ñ ÐºÐ¾ÑоÑой бÑл вÑполнен опеÑаÑÐ¾Ñ ÑозданиÑ. ÐÐ»Ñ Ð±Ð¾Ð»ÑÑинÑÑва Ñипов обÑекÑов в иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ ÑоÑÑоÑнии ÑолÑко Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ (или ÑÑпеÑполÑзоваÑелÑ) Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ñ Ð¾Ð±ÑекÑом вÑÑ, ÑÑо Ñгодно. ЧÑÐ¾Ð±Ñ ÑазÑеÑиÑÑ Ð¸ÑполÑзоваÑÑ ÐµÐ³Ð¾ дÑÑгим ÑолÑм, нÑжно даÑÑ Ð¸Ð¼ пÑава.
СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко Ñипов пÑав: SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE и USAGE. ÐÐ°Ð±Ð¾Ñ Ð¿Ñав, пÑименимÑÑ
к опÑеделÑÐ½Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, завиÑÐ¸Ñ Ð¾Ñ Ñипа обÑекÑа (ÑаблиÑа, ÑÑнкÑÐ¸Ñ Ð¸ Ñ. д.). Ðолее подÑобно назнаÑение ÑÑиÑ
пÑав опиÑÑваеÑÑÑ Ð½Ð¸Ð¶Ðµ. Ðак пÑименÑÑÑÑÑ ÑÑи пÑава, Ð²Ñ Ñакже ÑвидиÑе в ÑледÑÑÑиÑ
ÑазделаÑ
и главаÑ
.
ÐÑаво изменÑÑÑ Ð¸Ð»Ð¸ ÑдалÑÑÑ Ð¾Ð±ÑÐµÐºÑ ÑвлÑеÑÑÑ Ð½ÐµÐ¾ÑÑемлемÑм пÑавом владелÑÑа обÑекÑа, его нелÑÐ·Ñ Ð»Ð¸ÑиÑÑÑÑ Ð¸Ð»Ð¸ пеÑедаÑÑ Ð´ÑÑгомÑ. (Ðднако как и вÑе дÑÑгие пÑава, ÑÑо пÑаво наÑледÑÑÑ ÑÐ»ÐµÐ½Ñ Ñоли-владелÑÑа, Ñм. Раздел 20.3.)
ÐбÑекÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ назнаÑиÑÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾ владелÑÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER Ð´Ð»Ñ ÑооÑвеÑÑÑвÑÑÑего Ñипа обÑекÑа, напÑимеÑ:
ALTER TABLEимÑ_ÑаблиÑÑOWNER TOновÑй_владелеÑ;
СÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑо без огÑаниÑений, а обÑÑнÑй полÑзоваÑÐµÐ»Ñ â ÑолÑко еÑли он ÑвлÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно ÑекÑÑим владелÑÑем обÑекÑа (или Ñленом Ñоли владелÑÑа) и Ñленом новой Ñоли.
ÐÐ»Ñ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ñав пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° GRANT. ÐапÑимеÑ, еÑли в базе даннÑÑ
еÑÑÑ ÑÐ¾Ð»Ñ joe и ÑаблиÑа accounts, пÑаво на изменение ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ даÑÑ ÑÑой Ñоли Ñак:
GRANT UPDATE ON accounts TO joe;
ÐÑли вмеÑÑо конкÑеÑного пÑава напиÑаÑÑ ALL, ÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð²Ñе пÑава, пÑименимÑе Ð´Ð»Ñ Ð¾Ð±ÑекÑа ÑÑого Ñипа.
ÐÐ»Ñ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ñава вÑем ÑолÑм в ÑиÑÑеме можно иÑполÑзоваÑÑ ÑпеÑиалÑное Ð¸Ð¼Ñ Â«Ñоли»: PUBLIC. Также Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑолÑми, когда в базе даннÑÑ
еÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво полÑзоваÑелей, можно наÑÑÑоиÑÑ Â«Ð³ÑÑпповÑе» Ñоли; подÑобнее об ÑÑом Ñм. ÐлавÑ 20.
ЧÑÐ¾Ð±Ñ Ð»Ð¸ÑиÑÑ Ð¿Ð¾Ð»ÑзоваÑелей Ñанее даннÑÑ Ð¸Ð¼ пÑав, иÑполÑзÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ REVOKE:
REVOKE ALL ON accounts FROM PUBLIC;
ÐбÑÑно ÑаÑпоÑÑжаÑÑÑÑ Ð¿Ñавами Ð¼Ð¾Ð¶ÐµÑ ÑолÑко Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¾Ð±ÑекÑа (или ÑÑпеÑполÑзоваÑелÑ). Ðднако возможно даÑÑ Ð¿Ñаво доÑÑÑпа к обÑекÑÑ Â«Ñ Ð¿Ñавом пеÑедаÑи», ÑÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð¿Ð¾Ð»ÑÑивÑÐµÐ¼Ñ Ñакое пÑаво назнаÑаÑÑ ÐµÐ³Ð¾ дÑÑгим. ÐÑли Ñакое пÑаво пеÑедаÑи впоÑледÑÑвии бÑÐ´ÐµÑ Ð¾Ñозвано, Ñо вÑе, кÑо полÑÑил данное пÑаво доÑÑÑпа (непоÑÑедÑÑвенно или по ÑепоÑке пеÑедаÑи), поÑеÑÑÑÑ ÐµÐ³Ð¾. ÐодÑобнее об ÑÑом Ñм. ÑпÑÐ°Ð²ÐºÑ GRANT и REVOKE.
ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ Ð¾Ð±ÑекÑа Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ÑиÑÑ ÑÐµÐ±Ñ Ð¾Ð±ÑÑнÑÑ Ð¿Ñав, напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¿ÑеÑиÑÑ Ð½Ðµ ÑолÑко вÑем оÑÑалÑнÑм, но и Ñебе, вноÑиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑаблиÑÑ. Ðднако владелÑÑÑ Ð²Ñегда имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑпÑавлÑÑÑ Ð¿Ñавами, Ñак ÑÑо они могÑÑ Ð² лÑбом ÑлÑÑае веÑнÑÑÑ Ñебе пÑава, коÑоÑÑÑ Ð»Ð¸ÑилиÑÑ.
ÐÑе ÑÑÑеÑÑвÑÑÑие пÑава пеÑеÑиÑÐ»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ:
SELECTÐозволÑÐµÑ Ð²ÑполнÑÑÑ
SELECTÐ´Ð»Ñ Ð»Ñбого ÑÑолбÑа или пеÑеÑиÑленнÑÑ ÑÑолбÑов в заданной ÑаблиÑе, пÑедÑÑавлении, маÑпÑедÑÑавлении или дÑÑгом обÑекÑе ÑаблиÑного вида. Также позволÑÐµÑ Ð²ÑполнÑÑÑCOPY TO. Ðомимо ÑÑого, данное пÑаво ÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑÑÑеÑÑвÑÑÑим знаÑениÑм ÑÑолбÑов вUPDATEилиDELETE. ÐÐ»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей ÑÑо пÑаво позволÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÑÑÑ ÑÑнкÑиейcurrval. ÐÐ»Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±ÑекÑов оно позволÑÐµÑ ÑиÑаÑÑ ÑодеÑжимое обÑекÑа.INSERTÐозволÑÐµÑ Ð²ÑÑавлÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
INSERTÑÑÑоки в заданнÑÑ ÑаблиÑÑ, пÑедÑÑавление и Ñ. п. ÐÐ¾Ð¶ÐµÑ Ð½Ð°Ð·Ð½Ð°ÑаÑÑÑÑ Ð´Ð»Ñ Ð¾ÑделÑнÑÑ ÑÑолбÑов; в ÑÑом ÑлÑÑае ÑолÑко ÑÑим ÑÑолбÑам можно пÑиÑваиваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² командеINSERT(дÑÑгие ÑÑолбÑÑ Ð¿Ð¾Ð»ÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ). Также позволÑÐµÑ Ð²ÑполнÑÑÑCOPY FROM.UPDATEÐозволÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
UPDATEданнÑе во вÑÐµÑ , либо ÑолÑко пеÑеÑиÑленнÑÑ , ÑÑолбÑÐ°Ñ Ð² заданной ÑаблиÑе, пÑедÑÑавлении и Ñ. п. (Ðа пÑакÑике Ð´Ð»Ñ Ð»Ñбой неÑÑивиалÑной командÑUPDATEпоÑÑебÑеÑÑÑ Ð¸ пÑавоSELECT, Ñак как она должна обÑаÑиÑÑÑÑ Ðº ÑÑолбÑам ÑаблиÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, какие ÑÑÑоки Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð°Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, и/или вÑÑиÑлиÑÑ Ð½Ð¾Ð²Ñе знаÑÐµÐ½Ð¸Ñ ÑÑолбÑов.) ÐлÑSELECT ... FOR UPDATEиSELECT ... FOR SHAREÑакже ÑÑебÑеÑÑÑ Ð¸Ð¼ÐµÑÑ ÑÑо пÑаво как минимÑм Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑÑолбÑа, помимо пÑаваSELECT. ÐÐ»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей ÑÑо пÑаво позволÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÑÑÑ ÑÑнкÑиÑмиnextvalиsetval. ÐÐ»Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±ÑекÑов ÑÑо пÑаво позволÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð´Ð°Ð½Ð½Ñе в обÑÐµÐºÑ Ð¸Ð»Ð¸ обÑезаÑÑ ÐµÐ³Ð¾.DELETEÐозволÑÐµÑ ÑдалÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
DELETEÑÑÑоки из ÑаблиÑÑ, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ Ñ. п. (Ðа пÑакÑике Ð´Ð»Ñ Ð»Ñбой неÑÑивиалÑной командÑDELETEпоÑÑебÑеÑÑÑ Ñакже пÑавоSELECT, Ñак как она должна обÑаÑиÑÑÑÑ Ðº колонкам ÑаблиÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, какие ÑÑÑоки Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð°Ñ ÑдалениÑ.)TRUNCATEÐозволÑÐµÑ Ð¾Ð¿ÑÑÑоÑаÑÑ ÑаблиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
TRUNCATE.REFERENCESÐозволÑÐµÑ ÑоздаваÑÑ Ð¾Ð³ÑаниÑение внеÑнего клÑÑа, обÑаÑаÑÑееÑÑ Ðº ÑаблиÑе или опÑеделÑннÑм ÑÑолбÑам ÑаблиÑÑ.
TRIGGERÐозволÑÐµÑ ÑоздаваÑÑ ÑÑÐ¸Ð³Ð³ÐµÑ Ð´Ð»Ñ ÑаблиÑÑ, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ Ñ. п.
CREATEÐÐ»Ñ Ð±Ð°Ð· даннÑÑ ÑÑо пÑаво позволÑÐµÑ ÑоздаваÑÑ ÑÑ ÐµÐ¼Ñ Ð¸ пÑбликаÑии, а Ñакже ÑÑÑанавливаÑÑ Ð´Ð¾Ð²ÐµÑеннÑе ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð² конкÑеÑной базе.
ÐÐ»Ñ ÑÑ ÐµÐ¼ ÑÑо пÑаво позволÑÐµÑ ÑоздаваÑÑ Ð½Ð¾Ð²Ñе обÑекÑÑ Ð² заданной ÑÑ ÐµÐ¼Ðµ. ЧÑÐ¾Ð±Ñ Ð¿ÐµÑеименоваÑÑ ÑÑÑеÑÑвÑÑÑий обÑекÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ бÑÑÑ ÐµÐ³Ð¾ владелÑÑем и имеÑÑ ÑÑо пÑаво Ð´Ð»Ñ ÑÑ ÐµÐ¼Ñ, ÑодеÑжаÑей его.
ÐÐ»Ñ ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв ÑÑо пÑаво позволÑÐµÑ ÑоздаваÑÑ ÑаблиÑÑ, индекÑÑ Ð¸ вÑеменнÑе ÑÐ°Ð¹Ð»Ñ Ð² опÑеделÑнном ÑаблиÑном пÑоÑÑÑанÑÑве, а Ñакже ÑоздаваÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ ÑÑо пÑоÑÑÑанÑÑво бÑÐ´ÐµÑ Ð¾ÑновнÑм.
ÐамеÑÑÑе, ÑÑо ÑÐ°ÐºÑ Ð»Ð¸ÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑÑого пÑава не влиÑÐµÑ Ð½Ð° ÑÑÑеÑÑвование или ÑазмеÑение ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¾Ð±ÑекÑов.
CONNECTÐозволÑÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ Ðº базе даннÑÑ . ÐÑо пÑаво пÑовеÑÑеÑÑÑ Ð¿Ñи ÑÑÑановлении ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (в дополнение к ÑÑловиÑм, опÑеделÑннÑм в конÑигÑÑаÑии
pg_hba.conf).TEMPORARYÐозволÑÐµÑ ÑоздаваÑÑ Ð²ÑеменнÑе ÑаблиÑÑ Ð² опÑеделÑнной базе даннÑÑ .
EXECUTEÐозволÑÐµÑ Ð²ÑзÑваÑÑ ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ пÑоÑедÑÑÑ, в Ñом ÑиÑле иÑполÑзоваÑÑ Ð»ÑбÑе опеÑаÑоÑÑ, ÑеализованнÑе данной ÑÑнкÑией. ÐÑо единÑÑвеннÑй Ñип пÑав, пÑименимÑй к ÑÑнкÑиÑм и пÑоÑедÑÑам.
USAGEÐÐ»Ñ Ð¿ÑоÑедÑÑнÑÑ ÑзÑков ÑÑо пÑаво позволÑÐµÑ ÑоздаваÑÑ ÑÑнкÑии на опÑеделÑнном ÑзÑке. ÐÑо единÑÑвеннÑй Ñип пÑав, пÑименимÑй к пÑоÑедÑÑнÑм ÑзÑкам.
ÐÐ»Ñ ÑÑ ÐµÐ¼ ÑÑо пÑаво даÑÑ Ð´Ð¾ÑÑÑп к ÑодеÑжаÑимÑÑ Ð² Ð½Ð¸Ñ Ð¾Ð±ÑекÑам (пÑедполагаеÑÑÑ, ÑÑо пÑи ÑÑом имеÑÑÑÑ Ð¿Ñава, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к Ñамим обÑекÑам). Ðо ÑÑÑи ÑÑо пÑаво позволÑÐµÑ ÑÑбÑекÑÑ Â«Ð¿ÑоÑмаÑÑиваÑÑ» обÑекÑÑ Ð²Ð½ÑÑÑи ÑÑ ÐµÐ¼Ñ. Ðез ÑÑого ÑазÑеÑÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð° обÑекÑов вÑÑ Ð¶Ðµ можно бÑÐ´ÐµÑ ÑзнаÑÑ, напÑимеÑ, обÑаÑивÑиÑÑ Ðº ÑиÑÑемнÑм каÑалогам. ÐÑоме Ñого, еÑли оÑозваÑÑ ÑÑо пÑаво, в ÑÑÑеÑÑвÑÑÑÐ¸Ñ ÑеанÑÐ°Ñ Ð¼Ð¾Ð³ÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð¿ÑоÑмоÑÑ Ð¸Ð¼Ñн обÑекÑов бÑл вÑполнен Ñанее, Ñак ÑÑо ÑÑо пÑаво не позволÑÐµÑ Ð°Ð±ÑолÑÑно надÑжно пеÑекÑÑÑÑ Ð´Ð¾ÑÑÑп к обÑекÑам.
ÐÐ»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей ÑÑо пÑаво позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑнкÑии
currvalиnextval.ÐÐ»Ñ Ñипов и доменов ÑÑо пÑаво позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй Ñип или домен пÑи Ñоздании ÑаблиÑ, ÑÑнкÑий или дÑÑÐ³Ð¸Ñ Ð¾Ð±ÑекÑов ÑÑ ÐµÐ¼Ñ. (ÐамеÑÑÑе, ÑÑо ÑÑо пÑаво не огÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¾Ð±Ñее «иÑполÑзование» Ñипа, напÑÐ¸Ð¼ÐµÑ Ð¾Ð±ÑаÑение к знаÑениÑм Ñипа в запÑоÑÐ°Ñ . Ðез ÑÑого пÑава нелÑÐ·Ñ ÑолÑко ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ, завиÑÑÑие Ð¾Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñипа. ÐÑновное пÑедназнаÑение ÑÑого пÑава в Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð³ÑаниÑиÑÑ ÐºÑÑг полÑзоваÑелей, ÑпоÑобнÑÑ ÑоздаваÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи Ð¾Ñ Ñипа, коÑоÑÑе могÑÑ Ð²Ð¿Ð¾ÑледÑÑвии помеÑаÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑÑ Ñипа измениÑÑ ÐµÐ³Ð¾.)
ÐÐ»Ñ Ð¾Ð±ÑÑÑок ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ ÑÑо пÑаво позволÑÐµÑ ÑоздаваÑÑ Ð¸ÑполÑзÑÑÑие Ð¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑеÑвеÑов.
ÐÐ»Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑеÑвеÑов ÑÑо пÑаво позволÑÐµÑ ÑоздаваÑÑ Ð¸ÑполÑзÑÑÑие Ð¸Ñ ÑÑоÑонние ÑаблиÑÑ. ÐаделÑннÑе ÑÑим пÑавом могÑÑ Ñакже ÑоздаваÑÑ, модиÑиÑиÑоваÑÑ Ð¸Ð»Ð¸ ÑдалÑÑÑ ÑобÑÑвеннÑе ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей, ÑвÑзаннÑе Ñ Ð¾Ð¿ÑеделÑннÑм ÑеÑвеÑом.
ÐÑава, ÑÑебÑÑÑиеÑÑ Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, ÑÐºÐ°Ð·Ð°Ð½Ñ Ð½Ð° ÑÑÑаниÑÐ°Ñ ÑпÑавки ÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´.
Postgres Pro по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ð°Ð·Ð½Ð°ÑÐ°ÐµÑ Ñоли PUBLIC пÑава Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
Ñипов обÑекÑов, когда ÑÑи обÑекÑÑ ÑоздаÑÑÑÑ. ÐÐ»Ñ ÑаблиÑ, ÑÑолбÑов, поÑледоваÑелÑноÑÑей, обÑÑÑок ÑÑоÑонниÑ
даннÑÑ
, ÑÑоÑонниÑ
ÑеÑвеÑов, болÑÑиÑ
обÑекÑов, ÑÑ
ем и ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑв PUBLIC по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
пÑав не полÑÑаеÑ. ÐÐ»Ñ Ð´ÑÑгиÑ
Ñипов обÑекÑов PUBLIC полÑÑÐ°ÐµÑ ÑледÑÑÑие пÑава по ÑмолÑаниÑ: CONNECT и TEMPORARY (Ñоздание вÑеменнÑÑ
ÑаблиÑ) Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ
; EXECUTE â Ð´Ð»Ñ ÑÑнкÑий и пÑоÑедÑÑ; USAGE â Ð´Ð»Ñ ÑзÑков и Ñипов даннÑÑ
(вклÑÑÐ°Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ). ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ Ð¾Ð±ÑекÑа, конеÑно же, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑозваÑÑ (поÑÑедÑÑвом REVOKE) как Ñвно назнаÑеннÑе пÑава, Ñак и пÑава по ÑмолÑаниÑ. (ÐÐ»Ñ Ð¼Ð°ÐºÑималÑной безопаÑноÑÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ REVOKE нÑжно вÑполнÑÑÑ Ð² ÑÑанзакÑии, ÑоздаÑÑей обÑекÑ; Ñогда не обÑазÑеÑÑÑ Ð¾ÐºÐ½Ð¾, в коÑоÑом дÑÑгой полÑзоваÑÐµÐ»Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº обÑекÑÑ.) ÐÑоме Ñого, ÑÑи изнаÑалÑно назнаÑаемÑе пÑава по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑеопÑеделиÑÑ, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER DEFAULT PRIVILEGES.
РТаблиÑе 5.1 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¾Ð´Ð½Ð¾Ð±ÑквеннÑе ÑокÑаÑениÑ, коÑоÑÑми обознаÑаÑÑÑÑ ÑÑи пÑава в ÑпиÑÐºÐ°Ñ ACL (Access Control List, СпиÑок конÑÑÐ¾Ð»Ñ Ð´Ð¾ÑÑÑпа). ÐÑ ÑвидиÑе ÑÑи ÑокÑаÑÐµÐ½Ð¸Ñ Ð² вÑводе пеÑеÑиÑленнÑÑ Ð½Ð¸Ð¶Ðµ команд psql или в ÑÑолбÑÐ°Ñ ACL в ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ .
ТаблиÑа 5.1. СокÑаÑÑннÑе обознаÑÐµÐ½Ð¸Ñ Ð¿Ñав в ACL
| ÐÑаво | СокÑаÑение | ÐÑименимÑе ÑÐ¸Ð¿Ñ Ð¾Ð±ÑекÑов |
|---|---|---|
SELECT | r («read», ÑÑение) | LARGE OBJECT, SEQUENCE, TABLE (и обÑекÑÑ, подобнÑм ÑаблиÑам), ÑÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ |
INSERT | a («append», добавление) | TABLE, ÑÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ |
UPDATE | w («write», запиÑÑ) | LARGE OBJECT, SEQUENCE, TABLE, ÑÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ |
DELETE | d | TABLE |
TRUNCATE | D | TABLE |
REFERENCES | x | TABLE, ÑÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ |
TRIGGER | t | TABLE |
CREATE | C | DATABASE, SCHEMA, TABLESPACE |
CONNECT | c | DATABASE |
TEMPORARY | T | DATABASE |
EXECUTE | X | FUNCTION, PROCEDURE |
USAGE | U | DOMAIN, FOREIGN DATA WRAPPER, FOREIGN SERVER, LANGUAGE, SCHEMA, SEQUENCE, TYPE |
РТаблиÑа 5.2 Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñипа SQL-обÑекÑа Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¾ÑноÑÑÑиеÑÑ Ðº Ð½ÐµÐ¼Ñ Ð¿Ñава, Ñ Ð¸ÑполÑзованием пÑиведÑннÑÑ Ð²ÑÑе ÑокÑаÑений. Также в ней Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñипа пÑиведена команда psql, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑзнаÑÑ, какие пÑава назнаÑÐµÐ½Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑа ÑÑого Ñипа.
ТаблиÑа 5.2. Сводка пÑав доÑÑÑпа
| Тип обÑекÑа | ÐÑе пÑава | ÐÑава PUBLIC по ÑмолÑÐ°Ð½Ð¸Ñ | Ðоманда psql |
|---|---|---|---|
DATABASE | CTc | Tc | \l |
DOMAIN | U | U | \dD+ |
FUNCTION или PROCEDURE | X | X | \df+ |
FOREIGN DATA WRAPPER | U | Ð½ÐµÑ | \dew+ |
FOREIGN SERVER | U | Ð½ÐµÑ | \des+ |
LANGUAGE | U | U | \dL+ |
LARGE OBJECT | rw | Ð½ÐµÑ |  |
SCHEMA | UC | Ð½ÐµÑ | \dn+ |
SEQUENCE | rwU | Ð½ÐµÑ | \dp |
TABLE (и обÑекÑÑ, подобнÑе ÑаблиÑам) | arwdDxt | Ð½ÐµÑ | \dp |
| СÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ | arwx | Ð½ÐµÑ | \dp |
TABLESPACE | C | Ð½ÐµÑ | \db+ |
TYPE | U | U | \dT+ |
ÐÑава, назнаÑеннÑе Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнного обÑекÑа, вÑводÑÑÑÑ Ð² виде ÑпиÑка ÑлеменÑов aclitem, где каждÑй aclitem Ð¸Ð¼ÐµÐµÑ Ñакой ÑоÑмаÑ:
пÑавообладаÑелÑ=аббÑевиаÑÑÑа-пÑава[*].../пÑаводаÑелÑ
ÐаждÑй aclitem ÑодеÑÐ¶Ð¸Ñ ÑазÑеÑениÑ, коÑоÑÑе бÑли пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑÑбÑекÑÑ Ð¾Ð¿ÑеделÑннÑм пÑаводаÑелем. ÐонкÑеÑнÑе пÑава пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¾Ð´Ð½Ð¾Ð±ÑквеннÑми аббÑевиаÑÑÑами из ÑаблиÑÑ Ð¢Ð°Ð±Ð»Ð¸Ñа 5.1 Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ *, еÑли пÑаво бÑло вÑдано Ñ Ð¿Ð°ÑамеÑÑом пеÑедаÑи. ÐапÑимеÑ, запиÑÑ calvin=r*w/hobbes ознаÑаеÑ, ÑÑо ÑÐ¾Ð»Ñ calvin Ð¸Ð¼ÐµÐµÑ Ð¿Ñаво SELECT (r) Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð¿ÐµÑедаÑи (*), а Ñакже непеÑедаваемое пÑаво UPDATE (w), и оба ÑÑи пÑава Ð´Ð°Ð½Ñ ÐµÐ¼Ñ ÑолÑÑ hobbes. ÐÑли calvin Ð¸Ð¼ÐµÐµÑ Ð´Ð»Ñ ÑÑого обÑекÑа и дÑÑгие пÑава, пÑедоÑÑавленнÑе ÐµÐ¼Ñ Ð´ÑÑгим пÑаводаÑелем, они вÑводÑÑÑÑ Ð² оÑделÑном ÑлеменÑе aclitem. ÐÑÑÑое поле пÑавообладаÑÐµÐ»Ñ Ð² aclitem ÑооÑвеÑÑÑвÑÐµÑ Ñоли PUBLIC.
ÐапÑимеÑ, пÑедположим, ÑÑо полÑзоваÑÐµÐ»Ñ miriam ÑоздаÑÑ ÑаблиÑÑ mytable и вÑполнÑеÑ:
GRANT SELECT ON mytable TO PUBLIC; GRANT SELECT, UPDATE, INSERT ON mytable TO admin; GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
Тогда команда \dp в psql покажеÑ:
=> \dp mytable
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+---------+-------+-----------------------+-----------------------+----------
public | mytable | table | miriam=arwdDxt/miriam+| col1: +|
| | | =r/miriam +| miriam_rw=rw/miriam |
| | | admin=arw/miriam | |
(1 row)ÐÑли ÑÑÐ¾Ð»Ð±ÐµÑ Â«ÐÑава доÑÑÑпа» (Access privileges) Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ обÑекÑа пÑÑÑ, ÑÑо знаÑиÑ, ÑÑо Ð´Ð»Ñ Ð¾Ð±ÑекÑа дейÑÑвÑÑÑ ÑÑандаÑÑнÑе пÑава (Ñо еÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ñав в ÑооÑвеÑÑÑвÑÑÑем каÑалоге ÑодеÑÐ¶Ð¸Ñ NULL). ÐÑава по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñегда вклÑÑаÑÑ Ð²Ñе пÑава Ð´Ð»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа и могÑÑ Ñакже вклÑÑаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе пÑава Ð´Ð»Ñ PUBLIC в завиÑимоÑÑи Ð¾Ñ Ñипа обÑекÑа, как ÑазÑÑÑнÑлоÑÑ Ð²ÑÑе. ÐеÑÐ²Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° GRANT или REVOKE Ð´Ð»Ñ Ð¾Ð±ÑекÑа пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи пÑав по ÑмолÑÐ°Ð½Ð¸Ñ (напÑимеÑ, {miriam=arwdDxt/miriam}), а заÑем изменÑÐµÑ ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм запÑоÑом. ÐодобнÑм обÑазом, ÑÑÑоки, показаннÑе в ÑÑолбÑе «ÐÑава доÑÑÑпа к ÑÑолбÑам» (Column privileges), вÑводÑÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÑолбÑов Ñ Ð½ÐµÑÑандаÑÑнÑми пÑавами доÑÑÑпа. (ÐамеÑÑÑе, ÑÑо в данном конÑекÑÑе под «ÑÑандаÑÑнÑми пÑавами» вÑегда подÑазÑмеваеÑÑÑ Ð²ÑÑÑоеннÑй Ð½Ð°Ð±Ð¾Ñ Ð¿Ñав, пÑедопÑеделÑннÑй Ð´Ð»Ñ Ñипа обÑекÑа. ÐÑли Ñ Ð¾Ð±ÑекÑом ÑвÑзан Ð½Ð°Ð±Ð¾Ñ Ð¿Ñав по ÑмолÑаниÑ, полÑÑеннÑй поÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑезÑлÑÑаÑе ALTER DEFAULT PRIVILEGES, изменÑннÑе пÑава бÑдÑÑ Ð²Ñегда вÑводиÑÑÑÑ Ñвно, показÑÐ²Ð°Ñ ÑÑÑÐµÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER.)
ÐамеÑÑÑе, ÑÑо пÑаво ÑаÑпоÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¿Ñавами, коÑоÑое Ð¸Ð¼ÐµÐµÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ, не оÑмеÑаеÑÑÑ Ð² вÑводимой Ñводке. Ðнаком * оÑмеÑаÑÑÑÑ ÑолÑко Ñе пÑава Ñ Ð¿Ñавом пеÑедаÑи, коÑоÑÑе бÑли Ñвно назнаÑÐµÐ½Ñ ÐºÐ¾Ð¼Ñ-либо.