为了保持数据库的数据完整性,我正在尝试取消对未调用存储过程的所有查询的授权。但是我不希望直接从SQL Server运行的查询被阻止,因为那样我将无法对数据库进行任何更改(如果数据库无法区分“内部”查询和“外部”查询,也许查询会在特定授权下被允许)。我该怎么做?
您需要在数据库中创建一个自定义应用程序角色,该角色只能执行那些存储过程,但没有直接读取或更新数据的任何权限。
我通常采用的最简单的方法是:
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]