在當(dāng)前數(shù)據(jù)庫中添加一個特殊類型的角色以使應(yīng)用程序安全。
語法
sp_addapprole [ @rolename = ] 'role'
[ @password = ] 'password'
參數(shù)
[ @rolename = ] 'role'
新角色的名稱。role 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。role 必須是有效的標(biāo)識符,并且不能是當(dāng)前數(shù)據(jù)庫中已經(jīng)存在的標(biāo)識符。
[ @password = ] 'password'
激活角色所需的密碼。password 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。password 以加密形式存儲。
返回代碼值
0(成功)或 1(失敗)
注釋
Microsoft® SQL Server™ 角色可以包含 1 到 128 個字符,包括字母、符號和數(shù)字。但是,角色不能:
- 含有反斜線 (\)。
- 為 NULL 或空字符串。
標(biāo)準(zhǔn)角色和應(yīng)用程序角色間的基本差別是:
- 應(yīng)用程序角色不包含成員。用戶、Microsoft Windows NT® 組和角色無法添加到應(yīng)用程序角色中。當(dāng)通過特定的一個或多個應(yīng)用程序為用戶的連接激活應(yīng)用程序角色時,就會獲得該應(yīng)用程序角色的權(quán)限。帶有應(yīng)用程序角色的用戶關(guān)聯(lián)是由能夠運(yùn)行某個可以激活該角色,而不是該角色的某個成員的應(yīng)用程序產(chǎn)生的。
- 應(yīng)用程序角色默認(rèn)設(shè)置為未激活狀態(tài)。使用 sp_setapprole 激活它們,同時需要一個密碼。例如,密碼可以通過應(yīng)用程序提示由用戶提供,然而,該密碼通常包含在應(yīng)用程序內(nèi)。在密碼被發(fā)送到 SQL Server 時,它可以被加密。
- 當(dāng)一個應(yīng)用程序角色被該應(yīng)用程序激活以用于連接時,連接會在連接期間永久地失去數(shù)據(jù)庫中所有用來登錄的權(quán)限、用戶帳戶、其它組或數(shù)據(jù)庫角色。連接獲得與數(shù)據(jù)庫的應(yīng)用程序角色相關(guān)聯(lián)的權(quán)限,應(yīng)用程序角色存在于該數(shù)據(jù)庫中。因為應(yīng)用程序角色只能應(yīng)用于它們所存在的數(shù)據(jù)庫中,所以連接只能通過授予其它數(shù)據(jù)庫中 guest 用戶帳戶的權(quán)限,獲得對另一個數(shù)據(jù)庫的訪問。因此,如果數(shù)據(jù)庫中沒有 guest 用戶帳戶,則連接無法獲得對該數(shù)據(jù)庫的訪問。如果 guest 用戶帳戶確實存在于數(shù)據(jù)庫中,但是訪問對象的權(quán)限沒有被明確地授予 guest,那么不論是誰創(chuàng)建的對象,連接都不能訪問該對象。用戶從應(yīng)用程序角色獲得的權(quán)限仍然有效,直到連接從 SQL Server 注銷為止。
用戶定義事務(wù)內(nèi)不能執(zhí)行 sp_addapprole。
權(quán)限
只有 sysadmin 固定服務(wù)器角色成員和 db_owner 及 db_securityadmin 固定數(shù)據(jù)庫角色成員才能執(zhí)行 sp_addapprole。
示例
下面的示例用密碼 xyz_123 將新應(yīng)用程序角色 SalesApp 添加到當(dāng)前數(shù)據(jù)庫中。
EXEC sp_addapprole 'SalesApp', 'xyz_123'