560 likes | 782 Views
Virtual Private Databases. Brandon Mason Database Administrator America First Credit Union. What is a Virtual Private Database ?. What is a VPD?. Masks data in larger database Limits a user to only view/manipulate “private” data Contains both ROW and COLUMN level security.
E N D
Virtual Private Databases Brandon Mason Database Administrator America First Credit Union
What is a Virtual Private Database ?
What is a VPD? Masks data in larger database Limits a user to only view/manipulate “private” data Contains both ROW and COLUMN level security
The Basics • Been around Since 1999 • Orale 8i • Also Known As: • Fine Grained Access Control (FGAC) (i.e. Policies can be applied per table) • Row-Level Security (RLS)
How Magic Happens . • Re-Writes Query • Appends Predicate to SQL Query Select * from table; Becomes Select * from table where salary < 50000; • Multiple Predicates are ‘ANDed’ • Allows Multiple Policies per Table
VPD Vs. Views • Difficult (sometimes impossible) to maintain large number of views • What if Security Policy Changes? • Views best suited for simple evaluations • Data must reside in the database (or be hard-coded in the view) • Users bypass security when accessing base tables
DataBase Security Traditional What Users Can See (Permission)
DataBase Security Traditional What Users Can See (Permission) VPD What Users Can’tSee (Prohibition)
Benefits • Scalable • 1 function can replace (n) number of views • Simple • Even I implemented this, and I have an HR degree • Attaching VPD to base tables affects all related views and applications • Security • Server-enforced • Can be granted to Security Admin User • Based on DB Objects (not applications)
Benefits, cont. • Granularity If you want to limit: All Records for Selects Insert and Update your own Department Delete only your own record VPD can handle that! • Certified for EBS, among others • Simplifies Admin • Transcends Apps • Databases Outlive Applications
When to use • HR Data • HIPAA requirements • Franchises • Gyms, Kiosks, etc. • America First Credit Union
Privs Needed • Create Procedure* • *Unless existing procs are sufficient already • Execute on DBMS_RLS Package • DBMS_RLS.ADD_POLICY • DBMS_RLS.DROP_POLICY • DBMS_RLS.ENABLE_POLICY • Does NOT require object privs on target object
Attaching a Policy DBMS_RLS.ADD_POLICY
Removing a Policy DBMS_RLS.DROP_POLICY
WHO AM I? • Lewis Alcindor, Jr. • Kareem Abdul-Jabbar • Gordon Sumner • Sting • Gordon Schumway • A.LF.
Column Security Select * from table gives the same results, However…
ALL_ROWS Features • Attach a policy only to security-relevant data • Default Behavior restricts entire row • MASKING behavior • Returns ALL rows, but returns NULL for secured values • Restrictions • Applies only to SELECT statements • Must be simple Boolean
STATEMENT_TYPES • Can restrict based on type of SQL statement • Select • Insert • Update • Delete • Index • If not specified, policy applies to all but INDEX
STATEMENT_TYPES Note the function is always FALSE.
STATEMENT_TYPES Re-try same query, but securing a single column
UPDATE_CHECK What if the VPD allows us to update data - However, performing the update would kick the record out of the security policy?
Other Parameters • Enable • Toggles Policy on/off • Long_predicate • Increases length the of string returned by function • Static_policy / Policy_Type • Rarely used. Can improve speed with caching
Performance • Because VPD invokes a function each time a statement is issued, performance is a concern • 5 Options for controlling Caching • Dynamic (default) – no caching • Static – cached in SGA • Shared_Static - cached across multiple objects that use the same policy function • Context_Sensitive – Ideal for Connection Pooling • Shared_Context_Sensitive – Only executes function if it detects context changes
WHO AM I? • Carlos Irwin Estevez • Charlie Sheen • Cassius Clay • Muhammad Ali • William Bruce Rose • Axl Rose
Application Context . • Application Context securely caches user info • Global variable, holds info relevant to session • You can define, set, and access application attributes that you can use as a secure data cache • Increases performance, due to caching • Makes use of SYS_CONTEXT function
Application Context . • Preserves identity across multi-tier environments • Pre-defined app context “USERENV” • Describes the current session of the user • Computer ID • IP Address • OS Username *USERENV can only RETRIEVE session data, not set it • Chapter 6 of Oracle Database Security Guide for more information…
Application Context . Select syscontext(‘userenv’, ‘current_user’) from dual;
Application Context . • Set attribute value in an application context • DBMS_SESSION.SET_CONTEXT(‘namespace’, ‘attributename’, value); • Get attribute value from an application context, • SYS_CONTEXT(‘namespace’, ‘attributename’);
Policy Groups • Policy Group – set of security policies that belong to an application • Useful when multiple apps with complex share the same data • Example: a Data hosting company • DBMS_RLS.ADD_GROUPED_POLICY
Finding VPDs • ALL_SEC_RELEVANT_COLS; • select * from DBA_POLICIESwhere object_owner not in ('MDSYS', 'XDB');