I'd avoid creating a data access database (ie a database just to hold procs and views). You'll take a slight speed hit and it is likely to be confusing as it is more normal to put the views and procs in the database they are accessing. If you are concerned about people accessing things that they shouldn't, block all permissions on tables, so they are forced operate on tables via the procs and views only.
There is no question that if one thing changes (table), others will have to change (procs, accessor code, business logic etc), however if it is well designed code you limit the changes.
Also I'd try to avoid making something too general. This does no work well with databases. Picking a couple of ways you might generalise:
* Proc that returns everything for a table you specify.
Problem is that this goes into dynamic SQL and the proc will be very poorly performing. See:
http://www.algonet.se/~sommar/dynamic_sql.html
* General table to hold anything, ie structure is ID, AttributeName AttributeValue.
The performance on this one is hideous. Also it flys in the face of good normalisation practices.
Anyway, just try to keep your database normal and to avoid swiss army knife procs (ie procs that do everything).
regards
David Cameron