Using SQL Server 2008, is there a way to allow inserts to a table only via a stored procedure, and if so how?
EDIT:
The best way to go is probably Martin Smith’s suggestion to use an INSTEAD OF INSERT trigger. The direct answer to this question is marc_s’ one with GRANT and DENY, though it won’t limit some user accounts.
Just do not grant any database users (and your “public” role) the INSERT permission on the table.
Grant those users the permission to execute the INSERT stored proc – that way, they can call the stored proc, but they cannot directly insert any data into the underlying table.