Agree for 100% in terms of stored procedure - that is ultimately "last line of defense" 🙂
You would not scare me with Access linked tables to SQL Server -apparently this is curren "state of the art" of legacy systems created as mushrooms after rain since mid 90s. Been there, done that (no free T-Shirt unfortunately).
I usually use Views to retrieve data in SP (the R part of CRUD), and I would use them for reporting and data export during integration. I normally even enforce TOP 100 Percent to enforce sorting in views.
I usually stay shy from using ANY triggers - IMHO unless you implementing certain "JOB CREATION SCHEME". My usage of triggers was limited to populating historical tables when you need a "before and after" snapshots.
Create, Update and Delete SPs would work against table and I prefer this way because I could operate
with a set of records (bulk insert, update and delete via TVP) rather than struggle with RBAR anti-pattern
introduced by INSTEAD OF triggers.