一、設置用戶只能操作已授權的對象(表、視圖、存儲過程)
本文將介紹如何只想讓某個用戶訪問數據庫特定的表或視圖,達到保密的效果,本文演示表的設置過程,存儲過程和視圖同理。但這個流程設置完用戶可以看到所有的數據庫名,隱私性不強(點擊未授權的數據庫提示未授權,無法訪問)。
在設置之前我們要先檢查public角色的“查看任意數據庫”權限是否勾選(默認是勾選的),如果取消勾選下方創建用戶看不到任何數據庫。
1、登錄SSMS之后選擇安全性,右鍵點擊登錄名。在彈出的右鍵菜單中選擇【新建登錄名】選項。
2、在新建登錄名界面中的,常規頁面輸入新的登錄名並設定密碼。可以取消勾選用戶下次登錄時必須更改密碼選項。最后設定默認數據庫。
3、接下來在用戶映射頁面中,勾選映射需要配置的數據庫STAR_EMES。下方的數據庫角色成員身份只勾一個public即可。點擊確定按鈕完成新用戶創建。

4、展開STAR_EMES數據庫需要授權的對象,這里演示Basal_Equipment表,右鍵》屬性》權限》搜索》輸入前面創建的用戶test2》確定》勾選需要授權的操作類型》確定
5、使用前面創建的用戶登錄數據庫,登錄后點開STAR_EMES數據庫,可以看到只顯示Basal_Equipment表。
二、設置用戶只能查看並訪問特定數據庫(不推薦)
ps:此方法,只適用於此數據庫只設置一次當前行為,否則下次設置會取代授權的數據庫的db_owner權限,設置時先查看數據庫的所有者。
1.新建登錄用戶
以管理員身份登陸數據庫(權限最高的身份如sa),點擊安全性->登錄名,右鍵新建登錄名,輸入登錄名和密碼,取消強制實施密碼策略。
2.將服務器角色設置為public
注意:很重要的一步驟,檢查【用戶映射】中該用戶是否有對應的數據庫權限,如果有請把勾去掉,否則會影響第4點的操作結果
3.將public服務器角色的屬性->取消查看所有數據庫的權限
點擊安全性->服務器角色->public,右鍵屬性。點擊服務器后如下圖取消查看任意數據庫的權限
或者執行如下SQL:
REVOKE VIEW ANY DATABASE TO [public]
4.將待授權的數據庫的db_owner指派給剛注冊的新用戶
在數據庫中新建查詢,輸入下列sql語句。完成對用戶權限的設定,做到了新建用戶只能查看和操作特定數據庫(除系統數據庫外)
Use [WH_R]//WH_R為數據庫名稱 go EXEC dbo.sp_changedbowner N'user'//user為剛新建的用戶
注意:此處的設置不能手動取消,也無法刪除上述用戶,會有錯誤提示:
解決辦法,執行sql修改該數據庫的所有者
Use [WH_R]//WH_R為數據庫名稱 go EXEC dbo.sp_changedbowner N'sa'