使用SQL語句獲取SQL Server數(shù)據(jù)庫登錄用戶權限
2024-08-31 00:47:55
供稿:網(wǎng)友
 
sp_helprotect
返回一個報表,報表中包含當前數(shù)據(jù)庫中某對象的用戶權限或語句權限的信息。
語法
sp_helprotect [ [ @name = ] 'object_statement' ]    [ , [ @username = ] 'security_account' ]    [ , [ @grantorname = ] 'grantor' ]    [ , [ @permissionarea = ] 'type' ]
參數(shù)
[@name =] 'object_statement'
是當前數(shù)據(jù)庫中要報告其權限的對象或語句的名稱。object_statement 的數(shù)據(jù)類型為 nvarchar(776),默認值為 null,此默認值將返回所有的對象及語句權限。如果值是一個對象(表、視圖、存儲過程或擴展存儲過程),那么它必須是當前數(shù)據(jù)庫中一個有效的對象。對象名稱可以包含所有者限定符,形式為 owner.object。
如果 object_statement 是一個語句,則可以為: 
create databasecreate defaultcreate functioncreate procedurecreate rulecreate tablecreate viewbackup databasebackup log 
[@username =] 'security_account'
是返回其權限的安全帳戶名稱。security_account 的數(shù)據(jù)類型為 sysname,默認值為 null,這個默認值將返回當前數(shù)據(jù)庫中所有的安全帳戶。security_account 必須是當前數(shù)據(jù)庫中的有效安全帳戶。當指定 microsoft® windows nt® 用戶時,請指定該 windows nt 用戶在數(shù)據(jù)庫中可被識別的名稱(用 sp_grantdbaccess 添加)。
[@grantorname =] 'grantor'
是已授權的安全帳戶的名稱。grantor 的數(shù)據(jù)類型為 sysname,默認值為 null,這個默認值將返回數(shù)據(jù)庫中任何安全帳戶所授權限的所有信息。當指定 windows nt 用戶時,請指定該 windows nt 用戶在數(shù)據(jù)庫中可被識別的名稱(用 sp_grantdbaccess 添加)。
[@permissionarea =] 'type'
是一個字符串,表示是顯示對象權限(字符串 o)、語句權限(字符串 s)還是兩者都顯示 (o s)。type 的數(shù)據(jù)類型為 varchar(10),默認值為 o s。type 可以是 o 和 s 的任意組合,在 o 和 s 之間可以有也可以沒有逗號或空格。
返回代碼值
0(成功)或 1(失敗)
結果集列名數(shù)據(jù)類型描述ownersysname對象所有者的名稱。objectsysname對象的名稱。granteesysname被授予權限的用戶的名稱。grantorsysname向指定的被授權限用戶進行授權的用戶的名稱。protecttypechar(10)保護類型的名稱: 
grantrevoke
actionvarchar(20)權限的名稱: 
referencesselectinsertdeleteupdatecreate tablecreate databasecreate functioncreate rulecreate viewcreate procedureexecutebackup databasecreate defaultbackup log
columnsysname權限的類型: 
all = 權限適用于對象所有的當前列。new = 權限適用于任何以后可以在對象上進行修改(使用 alter 語句)的新列。all+new = all 和 new 的組合。
注釋
該過程的所有參數(shù)都是可選的。如果不帶參數(shù)執(zhí)行 sp_helprotect,將顯示當前數(shù)據(jù)庫中所有已經授予或拒絕的權限。 
如果指定了一部分參數(shù),而不是指定全部參數(shù),請使用命名參數(shù)來標識特定的參數(shù),或者使用 null 作為占位符。例如,若要報告授予方 dbo 的所有權限,請執(zhí)行:
exec sp_helprotect null, null, dbo
或
exec sp_helprotect @grantorname = 'dbo'
輸出報表按權限分類、所有者、對象、被授予方、授予方、保護類型分類、保護類型、動作以及列連續(xù) id 進行排序。
權限
執(zhí)行權限默認授予 public 角色。
示例a. 列出某個表的權限
下面的示例列出了表 titles 的權限。
exec sp_helprotect 'titles'
b. 列出某個用戶的權限
下面的示例列出當前數(shù)據(jù)庫中用戶 judy 所擁有的所有權限。
exec sp_helprotect null, 'judy'
c. 列出由某個特定的用戶授予的權限
下面的示例列出了當前數(shù)據(jù)庫中由用戶 judy 授予的所有權限,使用 null 作為缺少的參數(shù)的占位符。
exec sp_helprotect null, null, 'judy'
d. 僅列出語句權限
下面的示例列出當前數(shù)據(jù)庫中所有的語句權限,使用 null 作為缺少的參數(shù)的占位符。
exec sp_helprotect null, null, null, 's'