返回一個(gè)包含位圖的值,表明當(dāng)前用戶的語句、對象或列權(quán)限。
PERMISSIONS ( [ objectid [ , 'column' ] ] )
objectid
對象的 ID。如果未指定 objectid,則位圖值包含當(dāng)前用戶的語法權(quán)限;否則,位圖包含當(dāng)前用戶在該對象 ID 上的對象權(quán)限。指定的對象必須在當(dāng)前數(shù)據(jù)庫中。將 OBJECT_ID 函數(shù)用于對象名以確定 objectid 值。
column
返回其權(quán)限信息的列的可選名。該列必須是 objectid 所指定表中的有效列名。
int
可使用 PERMISSIONS 確定當(dāng)前用戶是否有執(zhí)行某個(gè)語句所需的權(quán)限,或者是否有將某個(gè)對象上的權(quán)限授予另一用戶所需的權(quán)限。
所返回的權(quán)限信息是 32 位位圖。
低 16 位反映對當(dāng)前用戶的安全帳戶所授予的權(quán)限,以及應(yīng)用于當(dāng)前用戶所在的 Microsoft® Windows NT® 組或 Microsoft SQL Server™ 角色的權(quán)限。例如,當(dāng)沒有指定 objectid 時(shí),將返回值 66(十六進(jìn)制值 0x42),表示當(dāng)前用戶有執(zhí)行 CREATE TABLE(十進(jìn)制值 2)和 BACKUP DATABASE(十進(jìn)制值 64)語句的權(quán)限。
高 16 位反映當(dāng)前用戶可以授予其他用戶的權(quán)限。除左移 16 位(與 65536 相乘)之外,高 16 位的解釋方式與下表中所介紹的低 16 位的解釋方式完全相同。例如,位 0x8(十進(jìn)制值 8)說明當(dāng)指定 objectid 時(shí)的 INSERT 權(quán)限。而 0x80000(十進(jìn)制值 524288)說明 GRANT INSERT 權(quán)限的能力,這是因?yàn)?524288 = 8 x 65536。由于角色中的成員資格,該用戶可能沒有執(zhí)行語句的權(quán)限,但仍然能夠?qū)⒃摍?quán)限授予他人。
下表顯示語句權(quán)限所使用的位(未指定 objectid)。
位(十進(jìn)制) | 位(十六進(jìn)制) | 語句權(quán)限 |
---|---|---|
1 | 0x1 | CREATE DATABASE(僅限于 master 數(shù)據(jù)庫) |
2 | 0x2 | CREATE TABLE |
4 | 0x4 | CREATE PROCEDURE |
8 | 0x8 | CREATE VIEW |
16 | 0x10 | CREATE RULE |
32 | 0x20 | CREATE DEFAULT |
64 | 0x40 | BACKUP DATABASE |
128 | 0x80 | BACKUP LOG |
256 | 0x100 | 保留 |
下表顯示當(dāng)僅指定 objectid 時(shí),返回的對象權(quán)限所使用的位。
位(十進(jìn)制) | 位(十六進(jìn)制) | 語句權(quán)限 |
---|---|---|
1 | 0x1 | SELECT ALL |
2 | 0x2 | UPDATE ALL |
4 | 0x4 | REFERENCES ALL |
8 | 0x8 | INSERT |
16 | 0x10 | DELETE |
32 | 0x20 | EXECUTE(僅限于過程) |
4096 | 0x1000 | SELECT ANY(至少一列) |
8192 | 0x2000 | UPDATE ANY |
16384 | 0x4000 | REFERENCES ANY |
下表顯示當(dāng)同時(shí)指定 objectid 和 column 時(shí),返回的列級(jí)對象權(quán)限所使用的位。
位(十進(jìn)制) | 位(十六進(jìn)制) | 語句權(quán)限 |
---|---|---|
1 | 0x1 | SELECT |
2 | 0x2 | UPDATE |
4 | 0x4 | REFERENCES |
如果指定的參數(shù)為 NULL 值或無效(例如,objectid 或 column 不存在),則返回 NULL 值。沒有定義不適用的權(quán)限所使用的位值(例如,表的 EXECUTE 權(quán)限、位 0x20)。
使用按位 AND (&) 運(yùn)算符確定 PERMISSIONS 函數(shù)返回的位圖中的每個(gè)位集。
還可使用 sp_helprotect 系統(tǒng)存儲(chǔ)過程返回某位用戶在當(dāng)前數(shù)據(jù)庫中的對象權(quán)限列表。
本示例確定當(dāng)前用戶是否能夠執(zhí)行 CREATE TABLE 語句。
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.'
本示例確定當(dāng)前用戶是否能夠在 authors 表中插入數(shù)據(jù)行。
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.'
本示例確定當(dāng)前用戶是否能夠?qū)?authors 表中的 INSERT 權(quán)限授予另一用戶。
IF PERMISSIONS(OBJECT_ID('authors'))&0x80000=0x80000
PRINT 'INSERT on authors is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on authors.'
相關(guān)文章