授予对基础表没有SELECT权限的存储过程的执行权限

时间:2017-03-20 23:13:46

标签: sql-server stored-procedures sql-server-2012 permissions

我不认为这是可能的,但我希望我错过了一些东西。假设我在SQL Server 2012 SP3中有这个存储过程:

.symfix
.reload
!analyze -v

我想授予数据库主体执行CREATE PROCEDURE [dbo].[myproc] AS SELECT * FROM [dbo].[mytable] 的权限,而不授予基础表上[myproc]的权限。

我尝试了各种SELECT语句而没有运气。当我执行GRANT时,我仍然会收到错误

  

选择mytable

上的权限被拒绝

数据库主体不是数据库所有者,我不想让他成为数据库所有者。

我正在尝试做什么?

感谢。

3 个答案:

答案 0 :(得分:1)

Weicher, 除非在基础表上有特定的拒绝,否则此授权声明应该有效:

angular.module('app')
    .controller('myController', myController);

function myController() {
    var vm = this;             // This is necessary for Controller As syntax to work
    vm.decisionSelected = "1"; // Assuming you want a default value
    vm.decisionList = [
        {
            "decisionCode": "1",
            "decisionDescription": "YES"
        }, 
        {
            "decisionCode": "2",
            "decisionDescription": "NO"
        }, 
        {
            "decisionCode": "3",
            "decisionDescription": "MAYBE"
        }];
}

使用以下代码进行测试:

GRANT Exec [dbo].[myproc] TO MyUser;
GO

当我通过六种方式改变代码到星期日时,我喜欢开始清洁,以确保我不会无意中发生任何事情并且非常有目的性。步。通过。步骤

  1. 制作测试表,授予MyUser读取权限 - 是否可以运行选择 使用execute作为用户代码?
  2. 删除阅读权限,选择是否有效? 如果它没有,世界仍然是健全的(有些)。现在尝试使用新的存储过程
  3. 向MyUser授予执行权限 - 是否有效?
  4. 如果是,则在实际表上执行相同的测试 - 您是否可以授予读取权限,然后可以删除读取权限。如果是这样,请重新创建SP并重试。

    抱歉,如果这太简单了,那么没有任何冒犯只是为了确保我们在同一页上进行测试。

    如果它不起作用,请发布测试结果,我会尝试进一步提供帮助。

答案 1 :(得分:0)

GRANT EXECUTE ON SPNAME TO DBUSER

答案 2 :(得分:0)

如果您不想让DB Principle成为所有者,那么您需要授予它“ Grant With”权限,以使它们进一步传递。

假设“ dbo”是所有者,“ ElevatedUser”是具有选择权限的新用户

GRANT EXECUTE ON  [dbo].[myproc] TO ElevatedUser WITH GRANT OPTION  AS [dbo]

GRANT EXECUTE ON [dbo].[myproc] TO MyUser as ElevatedUser

或者,如果您真的被卡住了,可以将其放在storedproc本身内

CREATE PROCEDURE [dbo].[myproc] 
with EXECUTE AS  'dbo' 
AS
BEGIN