以下命令是否有效地为用户“MyUser”授予了在数据库中执行所有存储过程的权限?
GRANT EXECUTE TO [MyDomain\MyUser]
SQL Server 2008及更高版本:
/* CREATE A NEW ROLE */ CREATE ROLE db_executor /* GRANT EXECUTE TO THE ROLE */ GRANT EXECUTE TO db_executor
仅适用于用户(不是角色):
USE [DBName] GO GRANT EXECUTE TO [user]
SQL Server 2005引入了grant database execute permissions数据库原理的能力,正如您所描述的:
这将在数据库范围内授予权限,该范围隐式包含所有模式中的所有存储过程 . 这意味着您不必为每个存储过程显式授予权限 .
如果您想要更细粒度,也可以通过granting schema execute permissions进行限制:
GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
除了上面的答案,我还想补充一下:
您可能希望将此权限授予 role ,然后将该角色分配给用户 . 假设您已经创建了一个角色 myAppRights
myAppRights
CREATE ROLE [myAppRights]
然后你可以通过提供执行权限
GRANT EXECUTE TO [myAppRights]
那个角色 .
或者,如果你想这样做 on schema level:
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
也适用(在此示例中,角色 myAppRights 将在之后的所有元素元素 dbo 上具有执行权限) .
dbo
这样,您只需要执行一次,并且可以在以后需要更改时轻松地向/从用户分配/撤消所有相关的应用程序权限 - 如果您想要创建更复杂的访问配置文件,这将非常有用 .
Note: 如果您为模式授予角色,这也会影响您稍后创建的元素 - 这可能是有益的,也可能不是取决于您的预期设计,因此请记住这一点 .
GRANT EXECUTE TO PUBLIC
这个肯定有帮助
4 回答
SQL Server 2008及更高版本:
仅适用于用户(不是角色):
SQL Server 2005引入了grant database execute permissions数据库原理的能力,正如您所描述的:
这将在数据库范围内授予权限,该范围隐式包含所有模式中的所有存储过程 . 这意味着您不必为每个存储过程显式授予权限 .
如果您想要更细粒度,也可以通过granting schema execute permissions进行限制:
除了上面的答案,我还想补充一下:
您可能希望将此权限授予 role ,然后将该角色分配给用户 . 假设您已经创建了一个角色
myAppRights
然后你可以通过提供执行权限
那个角色 .
或者,如果你想这样做 on schema level:
也适用(在此示例中,角色
myAppRights
将在之后的所有元素元素dbo
上具有执行权限) .这样,您只需要执行一次,并且可以在以后需要更改时轻松地向/从用户分配/撤消所有相关的应用程序权限 - 如果您想要创建更复杂的访问配置文件,这将非常有用 .
Note: 如果您为模式授予角色,这也会影响您稍后创建的元素 - 这可能是有益的,也可能不是取决于您的预期设计,因此请记住这一点 .
GRANT EXECUTE TO PUBLIC
这个肯定有帮助