@graham - Since 2012 SP1, this is no longer the case. You now only need read access to the tables/columns referenced in the query, join conditions, and predicates....
Ahhhh...I see what happened there. The parent_object_id from the sys.foreign_keys table is the owner of the foreign key object, which is correct. I believe the results of your query should...