Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 限制SQL Server对仅存储过程调用的授权_Sql Server_Tsql_Stored Procedures_Authorization - Fatal编程技术网

Sql server 限制SQL Server对仅存储过程调用的授权

Sql server 限制SQL Server对仅存储过程调用的授权,sql-server,tsql,stored-procedures,authorization,Sql Server,Tsql,Stored Procedures,Authorization,为了保持数据库的数据完整性,我正在尝试取消所有不是对存储过程调用的查询的授权。但我不希望直接从SQL Server运行的查询被阻止,因为这样我将无法对数据库进行任何更改(如果数据库无法区分“内部”查询和“外部”查询,可能在特定授权下允许查询)。如何执行此操作?您需要在数据库中创建一个自定义应用程序角色,该角色只能执行这些存储过程,但没有任何直接读取或更新数据的权限 我通常采用的最简单方法是: 创建一个自定义数据库角色db\u executor,其工作原理类似于db\u datareader 授

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

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

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

  • 创建一个自定义数据库角色
    db\u executor
    ,其工作原理类似于
    db\u datareader
  • 授予此角色执行所有当前和未来存储过程的权限
  • 创建仅具有此角色的用户-这些用户可以连接到您的数据库,并且只能执行存储过程-其他什么都不能
步骤1-创建新角色

CREATE ROLE [db_executor]
步骤2-授予权限

GRANT EXECUTE TO db_executor;
这将授予在此数据库中执行任何存储过程的权限—最棒的是:这不仅适用于运行此数据库时存在的存储过程—还将包括将来可能创建的任何存储过程

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

CREATE ROLE [db_executor]
当然,您可以在GUI中执行此操作,也可以使用以下T-SQL:

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

您设置了多个用户,有些用户是管理员,具有完全访问权限,有些用户不是管理员,只能调用SPs。请使用单独的数据库用户(通过SQL登录)和SQL Server权限。i、 例如:不对表应用任何权限,以便只有系统管理员和数据库所有者可以访问它们,然后仅对应允许权限较低的用户调用的存储过程应用
授予执行
权限。