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