sql-server - 我是否必须使用存储过程来获得查询级别的安全性,或者我仍然可以使用 Dynamic Sql 来做到这一点?

标签 sql-server security stored-procedures

我正在开发一个应用程序,我担心锁定对数据库的访问。我知道我可以开发存储过程(并通过适当的参数检查)限制数据库用户执行一组精确的查询。除了我在存储过程中创建的查询之外,其他任何查询都不得在该用户下执行。

理想情况下,即使黑客获得了对数据库连接的访问​​权限(它只接受来自某些计算机的连接),他们也只能执行预定义的存储过程。

我必须为此选择存储过程还是可以使用具有这些精细权限的 Dynamic Sql?

最佳答案

如果您使用存储过程(也可能使用 View ),您可以删除用户对基础表的任何直接权限 - 从而提供额外的安全“层”。您仅授予对存储过程的执行权限 - 这是普通用户所能看到的全部内容。

当您执行动态/即席 SQL 时,您必须至少授予这些用户直接对基表的 SELECT 权限。这绝对没有那么大的威慑力 - 它会向训练有素的人展示您的数据库结构,从而揭示更多关于您的数据库的信息,而不仅仅是一组存储过程。

关于sql-server - 我是否必须使用存储过程来获得查询级别的安全性,或者我仍然可以使用 Dynamic Sql 来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784207/

相关文章:

sql - SQL 查询中前 10 行的问题?

sql-server - SQL Server 应用程序角色

security - 为什么 Azure AD 在 Multi-Tenancy 场景中无法登录非管理员?

c# - 将存储过程 PIVOT 表转换为 LINQ 查询

java - 从 JDBC MSSQL 获取返回值

c# - 将从文本文件解析的 250 万行数据插入 Sql 服务器的最快方法是什么

sql-server - 请求错误 : { message: 'Requests can only be made in the LoggedIn state, not the SentLogin7WithStandardLogin state' , 代码: 'EINVALIDSTATE' }

json - 如何从存储在表中的嵌套 JSON 对象返回多行

php - PHP 有多安全?

c# - 存储过程产生从 c# .net 调用的不同结果