N'accordez simplement à aucun utilisateur de la base de données (et à votre rôle "public") l'autorisation INSERT sur la table.
Accordez à ces utilisateurs l'autorisation d'exécuter la procédure stockée INSERT - de cette façon, ils peuvent appeler la procédure stockée, mais ils ne peuvent pas insérer directement de données dans la table sous-jacente.
DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC