標籤:
以下內容主要針對database層面的資料存取權限(比如select, insert, update, delete, execute…)
1.直接給user許可權
GRANT EXECUTE TO [user]
2.通過role 控制許可權,把user加入role中,繼承Role所擁有的許可權
GRANT EXECUTE TO [Role]
ALTER ROLE [Role] ADD MEMBER [Member]
3.通過app role的方式訪問資料庫
Application Role 是資料庫層級的Role,不包含任何user,不能直接在資料庫中使用,只能通過應用程式串連資料庫使用。
Application Role不能和前面兩種方式同時生效,如果某個login已經有資料庫對應的User,而且賦予了相應的許可權,但登入以後又啟用了Application Role,那麼這個login的security context就會切換到Application Role的security context,也就是只有Application Role的許可權起作用。
需要注意的是在應用程式中啟用了Application role之後,要訪問其他的資料庫只能用Guest account,鑒於Guest account被很多DBA視為眼中釘肉中刺,想用Application Role的還是請三思。
4.Sp 的 execute as XX
這是一種較為推薦的方式,可以在最小的粒度上控制許可權。
這種方法就像領了尚方寶劍,比如 A是sp1的owner,sp1定義為 execute as owner,然後B有sp1的執行許可權,那麼B執行sp1的時候就擁有了A的所有許可權,有效期間到sp1執行結束。
類似的用法還有execute as caller/self/”username”/”loginName”. 預設情況,如果sp不寫execute as 語句,用的是execute as caller.
5.Owned schema
Schema作為資料庫中對象的集合,也可以用來控制許可權,通過給使用者賦予schema的許可權,就同時賦予了schema包含的所有table,view,sp的許可權。
可以在賦予schema許可權之後,再在對象層級(table,view…)修改存取權限,最終以對象層級的許可權為優先。
Sql Server資料庫物件存取權限控制