Ge bara inte några databasanvändare (och din "offentliga" roll) behörigheten INSERT på bordet.
Ge dessa användare tillstånd att köra INSERT lagrade proc - på så sätt kan de anropa den lagrade proc, men de kan inte direkt infoga någon data i den underliggande tabellen.
DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC