In reading @PerformanceDBA's answer to Historical / auditable database he made this statement:
In a real (standard ISO/IEC/ANSI SQL) database, we do not GRANT INSERT/UPDATE/DELETE permission to users. We GRANT SELECT and REFERENCES only (to chosen users) All INSERT/UPDATE/DELETEs are coded in Transactions, which means stored procs. Then we GRANT EXEC on each stored proc to selected users (use ROLES to reduce administration).
Is this true? How does that jive with ORM tools which generate INSERT/UPDATEs dynamically?
UPDATE
OK, so here's an example. I've got a web application with two interfaces, an Admin and a User. The admin side uses heavy ORM capable of generating hundreds if not thousands of distinct SQL commands dynamically.
The user interaction is far simpler, and I've got a dozen or so SPs that handle any UPDATE/INSERTs for a couple of voting buttons. Obviously the users the applications run under have very different permission sets. On the admin side the DB user for the ORM has full CRUD access to relevent tables, there are no SPs used at all for this application--and I wouldn't think of touching the data without going through the business logic in the domain model. Even bulk data imports get processed through the ORM. SPs on the user side I consider a small concession to this principle just because they are such a special case.
Now, I find the statement above in the original question somewhat disturbing, as I'd consider this to be something of a 'real' database, or at least close to it.