sp_adduser [ @loginame = ] 'login'
    [ , [ @name_in_db = ] 'user' ]
    [ , [ @grpname = ] 'group' ]在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句。语法
语句权限:GRANT { ALL | statement [ ,...n ] } 
TO security_account [ ,...n ]对象权限:GRANT
    { ALL [ PRIVILEGES ] | permission [ ,...n ] }
    { 
        [ ( column [ ,...n ] ) ] ON { table | view }
        | ON { table | view } [ ( column [ ,...n ] ) ]
        | ON { stored_procedure | extended_procedure }
        | ON { user_defined_function }
    } 
TO security_account [ ,...n ] 
[ WITH GRANT OPTION ] 
[ AS { group | role } ]参数
ALL表示授予所有可用的权限。对于语句权限,只有 sysadmin 角色成员可以使用 ALL。对于对象权限,sysadmin 和 db_owner 角色成员和数据库对象所有者都可以使用 ALL。statement是被授予权限的语句。语句列表可以包括: CREATE DATABASE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
BACKUP DATABASE
BACKUP LOG 
n一个占位符,表示此项可在逗号分隔的列表中重复。TO指定安全帐户列表。security_account是权限将应用的安全帐户。安全帐户可以是: Microsoft® SQL Server™ 用户。
SQL Server 角色。
Microsoft Windows NT® 用户。
Windows NT 组。 
当权限被授予一个 SQL Server 用户或 Windows NT 用户帐户,指定的 security_account 是权限能影响到的唯一帐户。若权限被授予 SQL Server 角色或 Windows NT 组,权限可影响到当前数据库中该组或该角色成员的所有用户。若组或角色和它们的成员之间存在权限冲突,最严格的权限 (DENY) 优先起作用。security_account 必须在当前数据库中存在;不可将权限授予其它数据库中的用户、角色或组,除非已为该用户在当前数据库中创建或给予了访问权限。两个特殊的安全帐户可用于 GRANT 语句。授予 public 角色的权限可应用于数据库中的所有用户。授予 guest 用户的权限可为所有在数据库中没有用户帐户的用户使用。当授予某个 Windows NT 本地组或全局组权限时,请指定在其上定义该组的域名或计算机名,然后依次输入反斜线和组名。但是,若要授予访问 Windows NT 内置本地组的权限,请指定 BUILTIN 而不是域名或计算机名。PRIVILEGES是可以包含在符合 SQL-92 标准的语句中的可选关键字。permission是当前授予的对象权限。当在表、表值函数或视图上授予对象权限时,权限列表可以包括这些权限中的一个或多个:SELECT、INSERT、DELETE、REFENENCES 或 UPDATE。列列表可以与 SELECT 和 UPDATE 权限一起提供。如果列列表未与 SELECT 和 UPDATE 权限一起提供,那么该权限应用于表、视图或表值函数中的所有列。在存储过程上授予的对象权限只可以包括 EXECUTE。在标量值函数上授予的对象权限可以包括 EXECUTE 和 REFERENCES。为在 SELECT 语句中访问某个列,该列上需要有 SELECT 权限。为使用 UPDATE 语句更新某个列,该列上需要有 UPDATE 权限。为创建引用某个表的 FOREIGN KEY 约束,该表上需要有 REFERENCES 权限。为使用引用某个对象的 WITH SCHEMABINDING 子句创建 FUNCTION 或 VIEW,该对象上需要有 REFERENCES 权限。column是当前数据库中授予权限的列名。table是当前数据库中授予权限的表名。view是当前数据库中被授予权限的视图名。stored_procedure是当前数据库中授予权限的存储过程名。extended_procedure是当前数据库中授予权限的扩展存储过程名。user_defined_function是当前数据库中授予权限的用户定义函数名。WITH GRANT OPTION表示给予了 security_account 将指定的对象权限授予其它安全帐户的能力。WITH GRANT OPTION 子句仅对对象权限有效。AS {group | role}指当前数据库中有执行 GRANT 语句权力的安全帐户的可选名。当对象上的权限被授予一个组或角色时使用 AS,对象权限需要进一步授予不是组或角色的成员的用户。因为只有用户(而不是组或角色)可执行 GRANT 语句,组或角色的特定成员授予组或角色权力之下的对象的权限。注释
不允许有跨数据库权限;只能将当前数据库中的对象和语句的权限授予当前数据库中的用户。如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。 说明  系统存储过程是例外,因为 EXECUTE 权限已经授予 public 角色,允许任何人去执行。但是在执行系统存储过程后,将检查用户的角色成员资格。如果此用户不是运行此存储过程所需要的适当的固定服务器或数据库角色的成员,则此存储过程不会继续执行。
REVOKE 语句可用于删除已授予的权限,DENY 语句可用于防止用户通过 GRANT 语句获得权限给他们的用户帐户。授予权限删除所授予级别(用户、组或角色)上的已拒绝权限或已废除权限。在另一级别(诸如包含此用户的组或角色)上被拒绝的同一权限优先起作用。但是,虽然在另一级别上所废除的同一权限仍然适用,但它并不阻止用户访问该对象。如果用户激活应用程序角色,对此用户通过该应用程序角色访问的任何对象,GRANT 的作用为空。因此,尽管一个用户可能被授予了对当前数据库中的指定对象的访问权限,但是如果此用户使用对此对象无访问权限的应用程序角色,则在应用程序角色激活期间,此用户也没有此对象的访问权限。sp_helprotect 系统存储过程报告在数据库对象或用户上的权限。权限
GRANT 权限依赖于所授予的语句权限和权限中涉及的对象。sysadmin 角色中的成员可在任何数据库中授予任何权限。对象所有者可为他们所拥有的对象授予权限。db_owner 或 db_securityadmin 角色的成员可授予其数据库中任何语句或对象上的任何权限。需要权限的语句是那些在数据库中增加对象,或对数据库执行管理活动的语句。每条需要权限的语句都有一个特定的角色集,自动有权限执行此语句。例如,sysadmin、db_owner 和 db_ddladmin 角色的成员默认有CREATE TABLE 权限。sysadmin 和 db_owner 角色以及表的所有者默认有对表执行 SELECT 语句的权限。

解决方案 »

  1.   

    说明  系统存储过程是例外,因为 EXECUTE 权限已经授予 public 角色,允许任何人去执行。但是在执行系统存储过程后,将检查用户的角色成员资格。如果此用户不是运行此存储过程所需要的适当的固定服务器或数据库角色的成员,则此存储过程不会继续执行。
    ____________
    请问: 要让一个普通的登录去执行xp_cmdshell存储过程,请问除授予sysadmin权限外,还用什么办法来实现呢?
    另:想让一个普通登录执行非系统存储过程又需要怎么做呢?
      

  2.   

    执行XP_cmdshell命令需要sysadmin权限的登录才可以
    可我只想xp_cmdshell用命令授权给某一用户,请问可以吗?Grant Execute on xp_cmdshell to Wolf with grant option
    这条命令执行后显示"服务器: 消息 4604,级别 16,状态 1,行 1
    不存在这样的用户或组: 'Wolf'。"这样的错误,可我已经在登录中添加了"Wolf",只是没授予它任何权限.
      

  3.   

    执行XP_cmdshell命令需要sysadmin权限的登录才可以
    可我只想xp_cmdshell用命令授权给某一用户,请问可以吗?Grant Execute on xp_cmdshell to Wolf with grant option
    这条命令执行后显示"服务器: 消息 4604,级别 16,状态 1,行 1
    不存在这样的用户或组: 'Wolf'。"这样的错误,可我已经在登录中添加了"Wolf",只是没授予它任何权限.
      

  4.   

    如何写某授权某登录执行某一个存储过程的语句呢?
    如下语句:为什么在执行时显示"不存在这样的用户或组: 'Eagle'"呢?  grant execute on sp_who to Eagle with grant option
      

  5.   

    如何写某授权某登录执行某一个存储过程的语句呢?
    如下语句:为什么在执行时显示"不存在这样的用户或组: 'Eagle'"呢?  grant execute on sp_who to Eagle with grant option