返回一个整数值,表示是为调用用户授予了指定系统特权还是用户定义的角色。当用于对用户定义的存储过程执行特权检查时,SP_HAS_ROLE 会在用户特权检查失败时返回一条错误消息。
dbo.sp_has_role(<[rolename]>、<[grant_type]>、<[throw_error]>)
参数说明rolename系统特权或用户定义角色的名称。grant_type有效值包括:ADMIN 和 NO ADMIN。如果值为 NULL 或未指定,则缺省使用 NO ADMIN。throw_error有效值包括: “1” - 如果没有为调用用户授予指定系统特权或用户定义角色,则显示错误消息。 “0” -(缺省设置)如果没有为调用用户授予指定系统特权或用户定义角色,将不显示错误消息。
值说明1已为调用用户授予系统特权或用户定义角色。0 或权限被拒绝:您没有执行此命令/过程的权限。没有为调用用户授予系统特权或用户定义角色。throw_error 参数设置为 1 时,将返回错误消息以代替值 0。 -1指定的系统特权或用户定义角色不存在。即使 throw_error 参数设置为 1,也不显示任何错误消息。
如果 grant_type 参数的值为 ADMIN,该函数将检查调用用户是否具有系统特权的管理特权。如果 grant_type 参数的值为 NO ADMIN,该函数将检查调用用户是否具有对系统特权或角色的使用特权。
如果未指定 grant_type 参数,则缺省使用 NO ADMIN,且输出仅指示是为调用用户授予(直接或间接)了指定的系统特权还是用户定义角色。
如果 rolename 和 grant_type 参数都为 NULL,且 throw_error 参数为 1,则显示错误消息。对于从目录表读取特定值而不是检查是否存在调用用户的系统特权之后出现错误消息的存储过程来说,此功能非常有用。 注意 如果参数 rolename 和 grant_type 设置为 NULL 且 throw_error 设置为 1,或三个参数全部设置为 NULL,则返回权限被拒绝的错误消息。
假定以下情形:
OPTION 子句授予 u1 CREATE ANY PROCEDURE 系统特权。
CREATE ANY TABLE 系统特权。
OPTION 子句授予 u1 用户定义角色 Role_A。
基于以上情形,该命令:
create any procedure' 返回值 1,表示已对 u1 授予 CREATE ANY PROCEDURE 系统特权。
create any table' 返回值 0,表示未对 u1 授予 CREATE ANY TABLE 系统特权。未返回错误消息,因为未指定 throw_error 参数。
create any procedure','admin',1 返回 Permission denied 错误消息 (throw_error=1)。即使已授予 u1 CREATE ANY PROCEDURE 系统特权,但未授予 u1 对系统特权的管理权限。
NULL,1 返回值 -1,表示角色 ROLE_C 不存在。