将存储过程的权限限制到SQL Server中-仅可调用

问题描述 投票:0回答:1

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

sql-server tsql stored-procedures authorization
1个回答
0
投票

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

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

  • 创建与db_executor类似的自定义数据库角色db_datareader >>
  • 授予该角色执行所有当前和将来的存储过程的权限
  • 创建仅具有此角色的用户-这些用户可以连接到您的数据库,并且他们只能执行存储过程-别无其他
  • 步骤1-创建新角色

CREATE ROLE [db_executor]

第2步-授予权限

GRANT EXECUTE TO db_executor;

这将授予在该数据库中执行any

存储过程的权限-很棒的是:这不仅适用于运行此程序时存在的存储过程-这还将包括所有存储的您将来可能创建的过程

第3步-向此角色添加用户

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

ALTER ROLE [db_executor] ADD MEMBER [your-user-name-here]
© www.soinside.com 2019 - 2024. All rights reserved.