Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 仅允许从存储过程执行select SQL查询_Sql Server - Fatal编程技术网

Sql server 仅允许从存储过程执行select SQL查询

Sql server 仅允许从存储过程执行select SQL查询,sql-server,Sql Server,我有一个C项目来自动化儿童玩具仓库的进出操作。我的应用程序使用ADO.NET与SQL Server数据库通信。我已经创建了一个名为LiBX的登录名。我拒绝对所有数据库表的所有权限,并授予对所有存储过程的执行权限,但在运行应用程序时,会显示一条错误消息: 对对象“TableMaterials”、数据库“STORDB”、架构“dbo”的选择权限被拒绝 如何拒绝所有数据库表中的所有权限并仅允许从存储过程执行SQL查询?运行存储过程时,查询在调用方的上下文中执行,但可以设置为以所有者身份运行,从而提供更

我有一个C项目来自动化儿童玩具仓库的进出操作。我的应用程序使用ADO.NET与SQL Server数据库通信。我已经创建了一个名为LiBX的登录名。我拒绝对所有数据库表的所有权限,并授予对所有存储过程的执行权限,但在运行应用程序时,会显示一条错误消息:

对对象“TableMaterials”、数据库“STORDB”、架构“dbo”的选择权限被拒绝


如何拒绝所有数据库表中的所有权限并仅允许从存储过程执行SQL查询?

运行存储过程时,查询在调用方的上下文中执行,但可以设置为以所有者身份运行,从而提供更高级别的权限-使用“以所有者身份执行”。这是避免所有权链接未完全覆盖的情况的一种有用方法。

存储过程利用所有权链接提供对数据的访问,因此用户无需拥有访问数据库对象的明确权限。当按顺序相互访问的对象由同一用户拥有时,就存在所有权链。例如,一个存储过程可以调用其他存储过程,或者一个存储过程可以访问多个表。如果执行链中的所有对象都具有相同的所有者,则SQL Server只检查调用者的执行权限,而不检查调用者对其他对象的权限。因此,您只需要授予存储过程的执行权限;您可以撤消或拒绝对基础表的所有权限-MSDN应该有用吗???但是为什么它对我不起作用呢?存储过程和表在同一个数据库中吗?是的,它在同一个数据库中Deny胜过包括GRANT在内的所有其他权限,这可能是一个很好的开始。拒绝阻止访问。拒绝胜过所有其他访问。如果用户对给定对象同时拥有授权和拒绝,则无论采用何种方式,拒绝都将生效。感谢Rob先生,您能告诉我如何为动态SQL做到这一点吗。以所有者身份执行@QR“所有者”附近的语法不正确。否,在调用sp_executesql的存储过程中执行。我有两个存储过程,它们都使用动态SQL在第一个存储过程中我使用EXECUTE函数,在第二个存储过程中我使用系统存储过程sp_executesql我尝试在该存储过程中使用EXECUTE AS OWNER,如下所示:EXECUTE AS OWNER exece sp_executesql@QueryString,N'@id int output',@IDX output它在“owner”附近显示错误消息语法不正确。感谢Rob先生的帮助否,您在存储过程的创建部分使用EXECUTE作为所有者。比如:创建procdbo。MyProc@i以所有者身份执行的int作为开始。。。ENDit是我的错是的你是对的现在开始工作了谢谢你Rob先生