regarding fine grained access:

it gives the same as views (like USER_TABLES vs ALL_TABLES vs DBA_TABLE in Oracle dictionary) but:
1) if contexts are used, then Optimizer knows about it and does not call the contect function for every row
2) one can define policies which gives the same as if view is created: the SQL engine adds implicit where clause when one queries some table on which the policy is defined.
(Personally I fell better with views since these are objects one can easily view in most GUI tools. Onthe other hand, one do not need to play with grants if policies are used - it is more centralized approach)