Yes, we've recently put together a reporting package (called report-builder, which is about to undergo primary audience testing), which makes the following acs_objects (with acs_attributes) within the system (there are actually more than these, but these are the basics):
definition
pretty_name
public_p
primary_keys (1 to many object_ids of columns)
table
schema
table_name
public_p
where_clause (for filtering forced by the system)
definition (object_id of definition)
column
column_name
pretty_name
table (object_id of table)
public_p
link
table_one (object_id of table)
column_one (object_id of column)
table_two (object_id of table)
column_two (object_id of column)
link_type (type of join)
A definition consists of many tables, that have many columns, and are linked together by the link objects. The primary key(s) for the definition is for accessing result sets through paginator.
This way, users can query the database on their own, and the permissions system (permission::permission_p, permission::require_permission, etc.) makes sure they are only accessing data that they are supposed to.
I still have to write the api and administration pages for the package, but expect it to be solid within a few months. I'll post to this thread when it is.