title: Grant SELECT permission on a view, but not on underlying objects
body: <p>I often read that one purpose of a VIEW is security: to allow some users access to the underlying table, and other users to a derived view only. With that in mind I designed several views that supply restricted datasets to external users.</p>
  
  <p>All very fine, but in practice this doesn't work. After I grant <code>SELECT</code> permission on a view, the users can't access it unless I grant <code>SELECT</code> on all underlying objects too. Same story for stored procedures. The net result is non-functional, for I end up still granting access to sensitive data to the wrong users, as well as annoying, for it is easy to forget one object and the users come back to complain that the view "doesn't work".</p>
  
  <p>Is there a way to grant <code>SELECT</code> permissions on a view or stored procedure without having to expose the underlying objects too?</p>