Apenas não conceda a nenhum usuário do banco de dados (e sua função "pública") a permissão INSERT na tabela.
Conceda a esses usuários a permissão para executar o procedimento armazenado INSERT - dessa forma, eles podem chamar o procedimento armazenado, mas não podem inserir nenhum dado diretamente na tabela subjacente.
DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC