未經(jīng)作者同意,任何人不得以“原創(chuàng)”形式發(fā)布,也不得已用于商業(yè)用途,本人不負(fù)責(zé)任何法律責(zé)任。
前一篇:http://blog.csdn.net/dba_huangzj/article/details/39548665
SQL Server的權(quán)限是有層次的,一個(gè)用戶有架構(gòu)級(jí)別的權(quán)限,就有了架構(gòu)內(nèi)部所有對(duì)象的權(quán)限,除非使用了DENY權(quán)限單獨(dú)移除。但是對(duì)象并不是層次中的最低級(jí),可以把權(quán)限設(shè)置到列級(jí)別。但是列級(jí)權(quán)限會(huì)覆蓋掉表上被GRANT的權(quán)限。
要實(shí)現(xiàn)分配列級(jí)權(quán)限,可以使用GRANT SELECT ON <對(duì)象>語(yǔ)句,并且加上所需的列,如:
這個(gè)語(yǔ)句會(huì)僅供HumanResourceAssistant數(shù)據(jù)庫(kù)角色成員能讀取dbo.Employee 表上的EmployeeId, LastName, Firstname, email這三列,表上的其他列將不能被查詢。(該表上還有Birthdate和Salary列),那么下面的查詢中,第一個(gè)語(yǔ)句可以執(zhí)行但是第二個(gè)語(yǔ)句不能執(zhí)行,因?yàn)樗枰褂玫絊alary列:
可以使用下面語(yǔ)句修改,使其可以查詢?nèi)淼臄?shù)據(jù),但是僅能更新表上的三列:
當(dāng)用戶嘗試查詢未被授權(quán)的列是,會(huì)收到230錯(cuò)誤:
但是要注意權(quán)限的修改,特別是對(duì)DENY的使用,避免過(guò)多使用最底層的權(quán)限設(shè)置而導(dǎo)致權(quán)限策略太復(fù)雜而無(wú)法管理或者權(quán)限交叉。
列級(jí)權(quán)限會(huì)導(dǎo)致權(quán)限體系的不一致性,在后續(xù)版本可能被移除,建議使用視圖來(lái)實(shí)現(xiàn)這種需求。
下一篇:http://blog.csdn.net/dba_huangzj/article/details/39639365