Sql server 如何向存储过程SQL Server中的用户授予权限

Sql server 如何向存储过程SQL Server中的用户授予权限,sql-server,Sql Server,我想向用户授予exec权限。这段代码不返回错误,但是当我看到用户属性时,我看不到授予的权限 GRANT EXECUTE TO @USERNAME 您需要在创建存储过程的数据库中授予权限,在sql server中,此选项位于数据库登录-->右键单击-->新建中,grant语句需要对象和主体。你只有一个校长 您希望允许用户执行什么操作—执行单个存储过程还是所有存储过程?对象将定义它。例如,如果您的存储过程名为MySchema.MyProc,则您将应用以下权限: GRANT EXECUTE ON M

我想向用户授予exec权限。这段代码不返回错误,但是当我看到用户属性时,我看不到授予的权限

GRANT EXECUTE TO @USERNAME

您需要在创建存储过程的数据库中授予权限,在sql server中,此选项位于数据库登录-->右键单击-->新建中,
grant
语句需要对象和主体。你只有一个校长

您希望允许用户执行什么操作—执行单个存储过程还是所有存储过程?对象将定义它。例如,如果您的存储过程名为
MySchema.MyProc
,则您将应用以下权限:

GRANT EXECUTE ON MySchema.MyProc TO MyUser
要允许用户执行
MySchema
模式中的任何存储过程,它将变为:

GRANT EXECUTE ON SCHEMA::MySchema TO MyUser

在测试您的场景时,我也没有看到SSMS在用户级别反映的权限。但是,我可以通过以下三种方式查看权限(我称我的用户为foo,因为我同情foo):

  • 模拟用户并查看数据库权限:
  • 直接询问权限表:

  • 注意-您授予权限的方式将其授予任何可以应用该权限的对象(无论是现在还是将来)。即数据库中的所有存储过程、函数等。如果这不是您想要做的(即,您只想向一个存储过程授予权限),那么您需要在
    grant
    语句中指定它。我之所以提到这一点,是因为您所做的工作在技术上是可行的,但根据我的经验,这更多的是一个例外而不是规则。

    事实上,不需要,
    GRANT
    语句不需要指定明确的安全性。如果未指定安全性,则该权限将应用于该范围内的任何安全性(即,数据库用于数据库范围的权限,服务器用于服务器范围的权限)。
    execute as user = 'foo';
    select *
    from sys.fn_my_permissions(null, 'database');
    go
    revert
    go
    
    select *
    from sys.database_permissions
    where grantee_principal_id = user_id('foo');