Du skal bare ikke give nogen databasebrugere (og din "offentlige" rolle) INSERT-tilladelsen på bordet.
Giv disse brugere tilladelse til at udføre den INSERT lagrede proc - på den måde kan de kalde den lagrede proc, men de kan ikke direkte indsætte nogen data i den underliggende tabel.
DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC