我正在开发一个应用程序,我担心锁定对数据库的访问。我知道我可以开发存储过程(并通过适当的参数检查)限制数据库用户执行一组精确的查询。除了我在存储过程中创建的查询之外,其他任何查询都不得在该用户下执行。
理想情况下,即使黑客获得了对数据库连接的访问权限(它只接受来自某些计算机的连接),他们也只能执行预定义的存储过程。
我必须为此选择存储过程还是可以使用具有这些精细权限的 Dynamic Sql?
最佳答案
如果您使用存储过程(也可能使用 View ),您可以删除用户对基础表的任何直接权限 - 从而提供额外的安全“层”。您仅授予对存储过程的执行权限 - 这是普通用户所能看到的全部内容。
当您执行动态/即席 SQL 时,您必须至少授予这些用户直接对基表的 SELECT 权限。这绝对没有那么大的威慑力 - 它会向训练有素的人展示您的数据库结构,从而揭示更多关于您的数据库的信息,而不仅仅是一组存储过程。
关于sql-server - 我是否必须使用存储过程来获得查询级别的安全性,或者我仍然可以使用 Dynamic Sql 来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784207/