sql-server - 为存储过程限制对 SQL Server 的授权 - 仅调用
问题描述
为了保持我的数据库的数据完整性,我试图取消对所有不调用存储过程的查询的授权。但是我不希望直接从 SQL Server 运行的查询被阻止,因为那样我将无法对数据库进行任何更改(如果数据库无法区分“内部”查询和“外部”查询,则查询可能会在特定授权下被允许)。我怎么能做这样的事情?
解决方案
您需要在数据库中创建一个自定义应用程序角色,该角色只能执行那些存储过程 - 但没有任何权限直接读取或更新数据。
我通常采取的最简单的方法是:
- 创建一个自定义数据库角色
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]
推荐阅读
- javascript - javascript中的文档是什么?
- php - 无法在实体 A 到 B 之间添加新的 ManyToMany 属性,因为我已经有一个包含这两个实体的 ManyToMany 属性
- flutter - 如何根据每个屏幕尺寸调整我的颤振应用程序的大小?
- c# - 无效的对象名称 dbo.EdmMetaData 调用新的 EFObjectSpaceProvider
- content-security-policy - 外部脚本的内容安全策略问题
- python - 在数组列上查找共同的朋友/互动
- spring - 我应该在 API 响应中包含嵌套数据还是发出两个单独的请求?
- java - 编写一个程序,要求用户输入金额并将其转换为越南盾
- javascript - 我无法理解这个 TabBarCustomButton 函数结构的部分内容,谁能解释一下?
- python - 使用时出现AttributeError;在 IBM Cloud Notebook 中插入代码 pandas DataFrame。该怎么办?