• 相关软件
    >PERMISSIONS 创建者:webmaster 更新时间:2006-02-16 15:51

    返回一个包含位图的值,表明当前用户的语句、对象或列权限。



    语法


    PERMISSIONS ( [ objectid [ , 'column' ] ] )



    参数


    objectid



    对象的 ID。如果未指定 objectid,则位图值包含当前用户的语法权限;否则,位图包含当前用户在该对象 ID 上的对象权限。指定的对象必须在当前数据库中。将 OBJECT_ID 函数用于对象名以确定 objectid 值。



    column



    返回其权限信息的列的可选名。该列必须是 objectid 所指定表中的有效列名。



    返回类型


    int



    注释


    可使用 PERMISSIONS 确定当前用户是否有执行某个语句所需的权限,或者是否有将某个对象上的权限授予另一用户所需的权限。



    所返回的权限信息是 32 位位图。



    低 16 位反映对当前用户的安全帐户所授予的权限,以及应用于当前用户所在的 Microsoft® Windows NT® 组或 Microsoft SQL Server™ 角色的权限。例如,当没有指定 objectid 时,将返回值 66(十六进制值 0x42),表示当前用户有执行 CREATE TABLE(十进制值 2)和 BACKUP DATABASE(十进制值 64)语句的权限。



    高 16 位反映当前用户可以授予其他用户的权限。除左移 16 位(与 65536 相乘)之外,高 16 位的解释方式与下表中所介绍的低 16 位的解释方式完全相同。例如,位 0x8(十进制值 8)说明当指定 objectid 时的 INSERT 权限。而 0x80000(十进制值 524288)说明 GRANT INSERT 权限的能力,这是因为 524288 = 8 x 65536。由于角色中的成员资格,该用户可能没有执行语句的权限,但仍然能够将该权限授予他人。



    下表显示语句权限所使用的位(未指定 objectid)。
































































    位(十进制)位(十六进制)语句权限
    10x1CREATE DATABASE(仅限于 master 数据库)
    20x2CREATE TABLE
    40x4CREATE PROCEDURE
    80x8CREATE VIEW
    160x10CREATE RULE
    320x20CREATE DEFAULT
    640x40BACKUP DATABASE
    1280x80BACKUP LOG
    2560x100保留



    下表显示当仅指定 objectid 时,返回的对象权限所使用的位。
































































    位(十进制)位(十六进制)语句权限
    10x1SELECT ALL
    20x2UPDATE ALL
    40x4REFERENCES ALL
    80x8INSERT
    160x10DELETE
    320x20EXECUTE(仅限于过程)
    40960x1000SELECT ANY(至少一列)
    81920x2000UPDATE ANY
    163840x4000REFERENCES ANY



    下表显示当同时指定 objectidcolumn 时,返回的列级对象权限所使用的位。




























    位(十进制)位(十六进制)语句权限
    10x1SELECT
    20x2UPDATE
    40x4REFERENCES



    如果指定的参数为 NULL 值或无效(例如,objectidcolumn 不存在),则返回 NULL 值。没有定义不适用的权限所使用的位值(例如,表的 EXECUTE 权限、位 0x20)。



    使用按位 AND (&) 运算符确定 PERMISSIONS 函数返回的位图中的每个位集。



    还可使用 sp_helprotect 系统存储过程返回某位用户在当前数据库中的对象权限列表。



    示例


    A. 对语句权限使用 PERMISSIONS 函数


    本示例确定当前用户是否能够执行 CREATE TABLE 语句。



    IF PERMISSIONS()&2=2
      CREATE TABLE test_table (col1 INT)
    ELSE
      PRINT 'ERROR: The current user cannot create a table.'


    B. 对对象权限使用 PERMISSIONS 函数


    本示例确定当前用户是否能够在 authors 表中插入数据行。



    IF PERMISSIONS(OBJECT_ID('authors'))&8=8 
      PRINT 'The current user can insert data into authors.'
    ELSE
      PRINT 'ERROR: The current user cannot insert data into authors.'


    C. 对可授予的权限使用 PERMISSIONS 函数


    本示例确定当前用户是否能够将 authors 表中的 INSERT 权限授予另一用户。



    IF PERMISSIONS(OBJECT_ID('authors'))&0x80000=0x80000
      PRINT 'INSERT on authors is grantable.'
    ELSE
      PRINT 'You may not GRANT INSERT permissions on authors.'
    相关文章
    本页查看次数: