Sql server mssql存储过程权限问题

Sql server mssql存储过程权限问题,sql-server,security,stored-procedures,permissions,Sql Server,Security,Stored Procedures,Permissions,我正在测试mssql中的权限,遇到了一个问题。我制作了一个“Countries”表和一个“spCountries”存储过程。现在,我已经创建了一个用户“silverlight”,并且没有授予它国家表的任何权限。用户可以执行存储过程 现在,当我进行选择时,它会像应该的那样失败,但在exec spal中,数据是可见的。如何检查存储过程中的权限 如果存储过程执行从国家/地区选择*而不是仅从…中选择,是否也可以执行此操作 也许返回一个空记录集而不是一个错误也更好 有人有想法吗?这是在SQL Server

我正在测试mssql中的权限,遇到了一个问题。我制作了一个“Countries”表和一个“spCountries”存储过程。现在,我已经创建了一个用户“silverlight”,并且没有授予它国家表的任何权限。用户可以执行存储过程

现在,当我进行选择时,它会像应该的那样失败,但在exec spal中,数据是可见的。如何检查存储过程中的权限

如果存储过程执行从国家/地区选择*而不是仅从…中选择,是否也可以执行此操作

也许返回一个空记录集而不是一个错误也更好

有人有想法吗?

这是在SQL Server中

因此,您可以授予存储过程的权限,而不必授予底层对象的权限。这允许您对用户可以进行的更新进行精确控制

如果不希望用户执行存储过程,请不要授予用户silverlight执行存储过程的权限

编辑:虽然再次阅读了这个问题,但听起来可能是因为。基本上,如果同一主体(例如dbo)拥有一个SP和一个用于该SP的表,则不会检查该表的权限。 事实上,这是有道理的。例如,它允许用户访问某些数据,但只能以SPs中编码的特定方式访问


如果使用动态SQL,则每次都会计算权限。由于SQL2005,您可以使用子句指定执行上下文。例如,EXECUTE AS OWNER使SP中的动态SQL在SP OWNER的上下文中执行,这与使用静态SQL的所有权链接具有类似的效果。

当我将select命令放在SP中时,不会出现错误。当我放置execSELECT。。命令,它会抛出一个错误。我的主要想法是用c快速填充多个数据网格。因此,我想创建一个sp,将表的名称作为参数。User1可以看到数据,但user2无法看到数据。所以执行官。。。这可能是我需要的。这样我就可以捕获c中的错误并退出表单或其他东西。这是个好主意吗?您使用的是哪个版本的SQL Server?您可以将EXEC用作。。。使用动态SQL使其在具有足够权限的帐户的凭据下执行。mssql 2008 server。我希望sp在当前用户下运行:每个用户对sp都有执行权限,但当当前用户对表没有选择权限时,sp会抛出错误。右侧。我想您可以尝试一下,在存储过程本身中使用catch,在catch块中使用类似于选择top 0'col1'作为col1,'col2'作为col2的内容,以返回一个空的resultset,如果这使C代码更简单。好的。不知道mssql中有一个尝试捕获!非常有用,thanx!我希望用户在存储过程中运行查询,但如果不允许,则抛出一个错误或一个空记录集。@VeeWee SELECT通过名称“dbo.Countries”、“OBJECT”、“SELECT”来设置“perms”,这似乎很好!我要在我的sp.Thx中构建它!我已经更新了我的答案
SELECT has_perms_by_name('dbo.Countries', 'OBJECT', 'SELECT')