当您考虑它时,在特定上下文中,限制对存储过程的访问非常有意义。这些过程公开了一个 API 并处理处理(例如检查复杂的约束),这在理论上是可以的。没有简单的方法来声明跨列约束,例如“如果 A 列为空,B 列应该是 {X, Y, Z} 之一”。多个应用程序可能正在使用过程 API,并且所有应用程序都可以从确保以正确方式处理数据的过程中受益。
但是,任何尝试在数据库中编写大量逻辑并在通用 OOP 语言中编写大量逻辑的人都知道,前者往往会导致无法维护、数据库锁定的大量无法理解的代码,而后者则被普遍认可作为“编写复杂应用程序/系统的方式”。
虽然存储过程 API 方法远未灭绝,但看到一个新项目开始使用这种模式,我真的会感到惊讶。ORM 远非完美,但它们确实提供了越来越多的理所当然的巨大好处:整个应用程序可以用一种语言(Python、Java、Groovy、Ruby ......)编写,您通常可以切换 DBMS几分钟(这会产生奇迹,例如,当您在 hsqldb 上运行测试,但在生产中使用 postgresql 时),与数据库之间的数据打包要简单得多(ORM 通常返回域对象,而不是原语),有缓存优势等
鉴于此,应用程序对其数据库中的所有内容具有完全 CRUD 访问权限是完全可以接受的。此外,如果您有一个只允许调用存储过程的帐户,我不建议您花时间研究如何规避访问权限:更好地利用您的时间是争取 CRUD 表访问权限。