Oracle рд▓реЗрдмрд▓ рд╕реБрд░рдХреНрд╖рд╛ред рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдереЗ

рдУрд░реЗрдХрд▓ рд▓реЗрдмрд▓ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА (рдУрдПрд▓рдПрд╕) рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдУрдПрд▓рдПрд╕ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрд╕реНрддрд░реАрдп рдПрдХреНрд╕реЗрд╕ рдиреАрддрд┐рдпрд╛рдВ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг рд╣реИред

рдиреАрддрд┐ рдХреЗ рдЕрдВрджрд░, рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: "рд╢реАрд░реНрд╖ рдЧреБрдкреНрдд", "рдЧреБрдкреНрдд", "рдЪрд┐рдкрдмреЛрд░реНрдб"ред рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рдкрд╣реБрдВрдЪ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрддрд░ рдФрд░ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред

рдУрд░реЗрдХрд▓ рд▓реЗрдмрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдУрд░реЗрдХрд▓ рдбрд╛рдЯрд╛рдмреЗрд╕ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рднреБрдЧрддрд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдиреАрдЪреЗ рд╣рдо рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рдУрдПрд▓рдПрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдкреНрд░рд╛рдердорд┐рдХ рдЕрдерд╡рд╛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд▓рдХреНрд╖рдг


Oracle рд▓реЗрдмрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ Oracle Virtual Private Database (VPD) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди VPD рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕реЗ PL / SQL рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдкреАрдПрд▓ / рдПрд╕рдХреНрдпреВрдПрд▓ рдкреИрдХреЗрдЬ рдФрд░ рдУрд░реЗрдХрд▓ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдореИрдиреЗрдЬрд░ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдУрдПрд▓рдПрд╕ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЖрд▓реЗрдЦ рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмрд╕реЗ 12 рд╕реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдУрдПрд▓рдПрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛, рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рдЕрдВрддрд░ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

OLS рдШрдЯрдХ


рд▓реЗрдмрд▓ (рдЯреИрдЧ)ред рд▓реЗрдмрд▓ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдмрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:

рдиреАрддрд┐ (рдиреАрддрд┐)ред рд▓рд┐рдВрдХ рдЯреИрдЧ, рдЯреЗрдмрд▓ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХ рд╕рд╛рдеред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдПрдХ рдХреНрд╖реЗрддреНрд░реАрдп рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдкрдиреА Z рд╣реИред
рдХрдВрдкрдиреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рднреБрдЧрддрд╛рди рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред рд╡реЗ рдИрдЖрд░рдкреА рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдФрд░ рднреБрдЧрддрд╛рди рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рднреБрдЧрддрд╛рди рд░рд╛рд╢рд┐ рдФрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реАрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛ рд╡рд┐рднреЗрджреАрдХрд░рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбрд┐рд╕реНрдХ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рднреБрдЧрддрд╛рди рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рдИрдЖрд░рдкреА рд╕реЗ рднреБрдЧрддрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд░рд╛рд╢рд┐ рдФрд░ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЗрд╕реЗ рдПрдХ рд▓реЗрдмрд▓ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЯреЗрдмрд▓ рдкрд░ рд▓рд┐рдЦрдирд╛ рдорд╛рдирдХ рдУрд░реЗрдХрд▓ рддрдВрддреНрд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдИрдЖрд░рдкреА рд╕реЗ рд╕рдВрднрд╡ рд╣реИред

рднреБрдЧрддрд╛рди рдХреА рд░рд╛рд╢рд┐ рдХреЛ 3 рднрд╛рдЧреЛрдВ рдореЗрдВ рдмрд╛рдВрдЯрд╛ рдЧрдпрд╛ рд╣реИ:
  1. рдмрдбрд╝рд╛ (рдмрдбрд╝рд╛) - 10000 рд╕реЗ
  2. рдордзреНрдпрдо (рдордзреНрдпрдо) - 5,000 рд╕реЗ 9,999
  3. рдЫреЛрдЯрд╛ (рдЫреЛрдЯрд╛) - 5000 рддрдХ

рдХреНрд╖реЗрддреНрд░:
  1. рдПрдордУ (рдорд╛рд╕реНрдХреЛ рдФрд░ рдХреНрд╖реЗрддреНрд░)
  2. NW (рдЙрддреНрддрд░ рдкрд╢реНрдЪрд┐рдо)

рд╕рджрд╕реНрдп:
  1. big_boss - рдЕрдзрд┐рдХрддрдо рдкрд╣реБрдВрдЪ рд╕реНрддрд░ рд╣реИ, рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ
  2. med_boss - рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ 5000 рд╕реЗ 9999 рддрдХ рднреБрдЧрддрд╛рди рджреЗрдЦрддрд╛ рд╣реИ
  3. mo_big_boss - рд╕рднреА рднреБрдЧрддрд╛рди рджреЗрдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ MO рдХреНрд╖реЗрддреНрд░ рдореЗрдВ

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


Oracle рд▓реЗрдмрд▓ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдХреИрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВред
рд╣рдо TEST рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рднреБрдЧрддрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
create table PAYMENTS ( ID number, CNAME varchar2(64), /*    */ REGION char(2), /*   MO/NW */ AMOUNT number, /*   */ ols_payments number(10), /*      */ CONSTRAINT "PAYMENTS_PK" PRIMARY KEY ("ID") ) PARTITION BY RANGE (ols_payments) ( PARTITION SP VALUES LESS THAN (80000), PARTITION MP VALUES LESS THAN (90000), PARTITION BP VALUES LESS THAN (MAXVALUE) /*           */ ); grant select on payments to public; 


Ols_payments рдХреЙрд▓рдо рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рднрд╛рдЬрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрджрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рднреА рдЖрдЧреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ LBACSYS рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ ред
рдкреНрд░рддреНрдпреЗрдХ рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдкрддреНрд░ policy_DBA рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рднреВрдорд┐рдХрд╛ рд╕реНрд╡рд╛рдореА рдЗрд╕ рдиреАрддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкреЙрд▓рд┐рд╕реА рднреБрдЧрддрд╛рди_рдкреЛрд▓ рдмрдирд╛рдПрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 EXEC SA_SYSDBA.CREATE_POLICY ( policy_name => 'payments_pol', /*  policy */ column_name => 'ols_payments', /*      */ default_options => 'read_control'); /*       */ 


рд╣рдорд╛рд░реА рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рд░рд╛рд╢рд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕реНрддрд░ рдмрдирд╛рдПрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 BEGIN SA_COMPONENTS.CREATE_LEVEL ( policy_name => 'payments_pol', level_num => 90, /*   */ short_name => 'B', /*   */ long_name => 'BIG_PAYMENT'); /*   */ SA_COMPONENTS.CREATE_LEVEL ( policy_name => 'payments_pol', level_num => 80, short_name => 'M', long_name => 'MEDIUM_PAYMENT'); SA_COMPONENTS.CREATE_LEVEL ( policy_name => 'payments_pol', level_num => 70, short_name => 'S', long_name => 'SMALL_PAYMENT'); END; / 


рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдкреВрд░реНрдг рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдиреАрдЪреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 BEGIN /*   */ SA_COMPONENTS.CREATE_GROUP ( policy_name => 'payments_pol', group_num => 10, /*   */ short_name => 'RG', /*   */ long_name => 'REGIONS'); /*   */ SA_COMPONENTS.CREATE_GROUP ( policy_name => 'payments_pol', group_num => 20, short_name => 'MO', long_name => 'MOSCOW_REGION', parent_name => 'RG'); /*  */ SA_COMPONENTS.CREATE_GROUP ( policy_name => 'payments_pol', group_num => 30, short_name => 'NW', long_name => 'NW_REGION', parent_name => 'RG'); END; / 


рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдкреВрд░реНрдг рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд░реВрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП, рдореВрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред

рд▓реЗрдмрд▓ рдХрд╛ рдкрд╛рда рдкреНрд░рд╛рд░реВрдк "LEVEL: COMPARTMENT1, .., COMPARTMENTN: GROUP1, ..., GROUPN" рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдореЙрд╕реНрдХреЛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП 10,000 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд░рд╛рд╢рд┐ рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ "рдмреА :: рдПрдордУ" рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред

рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдореЗрдВ рдкрд╛рда рд▓реЗрдмрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдмрд▓ рдЯреИрдЧ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдмрд▓ рдЯреИрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдмрд▓ рдЯреИрдЧ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд▓реЗрдмрд▓ рдЯреИрдЧ рдХреЗ рдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗред рд▓реЗрдмрд▓ рдЯреИрдЧ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдореВрд╣ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рд╕реНрддрд░ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред

рдЯреИрдЧ рдмрдирд╛рдПрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 BEGIN -- RG labels SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 90010, /*    */ label_value => 'B::RG', /*    */ data_label => TRUE); SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 80010, label_value => 'M::RG', data_label => TRUE); SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 70010, label_value => 'S::RG', data_label => TRUE); -- MO LABELS SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 90020, label_value => 'B::MO', data_label => TRUE); SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 80020, label_value => 'M::MO', data_label => TRUE); SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 70020, label_value => 'S::MO', data_label => TRUE); -- NW LABELS SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 90030, label_value => 'B::NW', data_label => TRUE); SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 80030, label_value => 'M::NW', data_label => TRUE); SA_LABEL_ADMIN.CREATE_LABEL ( policy_name => 'payments_pol', label_tag => 70030, label_value => 'S::NW', data_label => TRUE); END; / 


рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЗрдмрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 create or replace function payments_label(region varchar2, amount number) return LBACSYS.LBAC_LABEL as lvl varchar2(32); reg varchar2(32); rvalue number(10); begin case region when 'MO' then reg := 'MO'; when 'NW' then reg := 'NW'; else raise_application_error(-20000, 'invalid region.'); end case; case when amount >= 10000 then lvl := 'B'; when amount >= 5000 then lvl := 'M'; else lvl := 'S'; end case; return LBACSYS.to_lbac_label('PAYMENTS_POL', lvl || '::' || reg); end; 


рдФрд░ рдЖрдк рд╣рдорд╛рд░реА рдиреАрддрд┐ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 EXEC SA_POLICY_ADMIN.APPLY_TABLE_POLICY ( policy_name => 'payments_pol', schema_name => 'test', table_name => 'payments', table_options => 'READ_CONTROL,HIDE', /*  ,     */ label_function => 'test.payments_label(:new.region,:new.amount)', /*   ,         insert  update.     */ predicate => NULL); 


рдИрдЖрд░рдкреА рд╕реЗ рднреБрдЧрддрд╛рди рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реБрдП рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рднрд░реЗрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 $ sqlplus test/test insert into payments values(1, '  , ', 'MO', 100000); insert into payments values(2, '  , ', 'MO', 7000); insert into payments values(3, '  , ', 'MO', 100000); insert into payments values(4, '  , ', 'NW', 150000); insert into payments values(5, '  , ', 'NW', 3000); 


рдФрд░ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХрд╛рд░ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 -- big boss BEGIN SA_USER_ADMIN.SET_LEVELS ( policy_name => 'payments_pol', user_name => 'big_boss', max_level => 'B'); SA_USER_ADMIN.SET_GROUPS ( policy_name => 'payments_pol', user_name => 'big_boss', read_groups => 'RG'); -- medium boss SA_USER_ADMIN.SET_LEVELS ( policy_name => 'payments_pol', user_name => 'med_boss', max_level => 'M'); SA_USER_ADMIN.SET_GROUPS ( policy_name => 'payments_pol', user_name => 'med_boss', read_groups => 'RG'); -- big boss of MO region SA_USER_ADMIN.SET_LEVELS ( policy_name => 'payments_pol', user_name => 'mo_big_boss', max_level => 'B'); SA_USER_ADMIN.SET_GROUPS ( policy_name => 'payments_pol', user_name => 'mo_big_boss', read_groups => 'MO'); END; / 


рдЦреИрд░, рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ:

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ big_boss рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ:
 $ sqlplus big_boss/qw SQL> select label_to_char (ols_payments) label, id, cname, amount from test.payments; LABEL ID CNAME AMOUNT ---------- ---------- ------------------------------ ---------- S::MO 3   ,  2000 S::NW 5   ,  3000 M::MO 2   ,  7000 B::MO 1   ,  100000 B::NW 4   ,  150000 

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ med_boss рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ 10,000 рд╕реЗ рдХрдо рдХреА рд░рд╛рд╢рд┐ рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрддрд╛ рд╣реИ:
 sqlplus med_boss/qw SQL> select label_to_char (ols_payments) label, id, cname, amount from test.payments; LABEL ID CNAME AMOUNT ---------- ---------- ------------------------------ ---------- S::MO 3   ,  2000 S::NW 5   ,  3000 M::MO 2   ,  7000 

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ mo_big_boss рдХрд┐рд╕реА рднреА рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдорд╛рд╕реНрдХреЛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ:
 $ sqlplus mo_big_boss/qw SQL> select label_to_char (ols_payments) label, id, cname, amount from test.payments; LABEL ID CNAME AMOUNT ---------- ---------- ------------------------------ ---------- S::MO 3   ,  2000 M::MO 2   ,  7000 B::MO 1   ,  100000 

рдкреБрдирд╢реНрдЪред Oracle рд▓реЗрдмрд▓ рд╕реБрд░рдХреНрд╖рд╛ INSERT / DELETE / UPDATE рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХрд╛ рдЖрдХрд╛рд░ рдЖрдкрдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

Source: https://habr.com/ru/post/In185946/


All Articles