首页 > 解决方案 > 为存储过程限制对 SQL Server 的授权 - 仅调用

问题描述

为了保持我的数据库的数据完整性,我试图取消对所有不调用存储过程的查询的授权。但是我不希望直接从 SQL Server 运行的查询被阻止,因为那样我将无法对数据库进行任何更改(如果数据库无法区分“内部”查询和“外部”查询,则查询可能会在特定授权下被允许)。我怎么能做这样的事情?

标签: sql-servertsqlstored-proceduresauthorization

解决方案


您需要在数据库中创建一个自定义应用程序角色,该角色只能执行那些存储过程 - 但没有任何权限直接读取或更新数据。

我通常采取的最简单的方法是:

  • 创建一个自定义数据库角色db_executor,其工作方式类似于db_datareader
  • 授予此角色执行所有当前和未来存储过程的权限
  • 创建仅获得此角色的用户 - 这些用户可以连接到您的数据库并且他们只能执行存储过程 - 没有别的

第 1 步 - 创建新角色

CREATE ROLE [db_executor]

第 2 步 - 授予权限

GRANT EXECUTE TO db_executor;

这授予执行此数据库中的任何存储过程的权限 - 很棒的是:这不仅仅适用于您运行时存在的存储过程 - 这还将包括您可能在未来

第 3 步 - 将用户添加到此角色

您当然可以在 GUI 中执行此操作 - 或使用此 T-SQL:

ALTER ROLE [db_executor] ADD MEMBER [your-user-name-here]

推荐阅读