当你考虑这个问题时,在某个上下文中,限制对存储过程的访问是非常有意义的。这些过程公开了一个API并处理理论上很好的处理(例如检查复杂约束)。 没有简单的方法来声明交叉列约束,如“如果列A为空,列B应该是{X,Y,Z}之一”。多个应用程序可能会使用过程API,并且所有程序都可以从程序中受益,从而确保以正确的方式处理数据。但是,任何试图在数据库中编写大量逻辑并且使用通用OOP语言编写大量逻辑的人都知道,前者倾向于导致无法维护的,DB锁定的不可理解代码的高峰,而后来通常被认为是“编写复杂应用程序/系统的方式”。
虽然存储过程API方法远没有绝迹,但我真的很惊讶地发现使用这种模式的新项目开始了。 ORM远非完美,但它们确实提供了越来越多被认为是理所当然的好处:整个应用程序可以用一个语言(Python,Java,Groovy,Ruby ...)编写,您通常可以切换DBMS在几分钟内(例如,当你在hsqldb上运行测试时,但在生产中使用postgresql时,它可以工作奇迹),数据库的数据打包要简单得多(ORM通常返回域对象,而不是原语),有缓存优势等。
有鉴于此,完全可以接受的是,应用程序对数据库中的所有内容都具有完全的CRUD访问权限。另外,如果你有一个只允许你调用存储过程的账户,我不建议花时间研究如何规避访问权限:更好地利用你的时间就是争取CRUD表访问权限。
您是否有权更改存储过程?存储过程是否可以完全访问表? ORM对表格的工作效果最好,但是一个好的ORM通常会退化为以相当残缺的方式处理存储过程。 – 2010-05-12 11:16:42
哦。我还没有探索过这个选择。 – Jonn 2010-05-12 22:47:31