當前位置:
首頁 > 知識 > Security5:授予查看定義,執行和修改SP的許可權

Security5:授予查看定義,執行和修改SP的許可權

SQL Server資料庫有完善的許可權管理機制,對於存儲過程,其許可權分為查看定義,執行和修改,查看SP定義的許可權是:VIEW
DEFINITION
,執行存儲過程的許可權是:EXECUTE,修改SP的許可權是:ALTER,但是該許可權也能修改表結構,視圖的定義等資料庫對象。數據的讀取許可權是SELECT,這個查看定義是不同的許可權。對於一個數據表,如果僅授予VIEW
DEFINITION許可權,而沒有授予SELECT許可權,那麼用戶只能查看數據表的結構(Schema),而無法查看錶中存儲的數據。

Security5:授予查看定義,執行和修改SP的許可權

在管理許可權時,可以給特定的用戶授予「只能讀取數據和執行SP,而不能修改數據」的許可權,也就是,使特定的用戶只能查看數據(只讀,SELECT),只能查看定義(VIEW
DEFINITION),和執行SP的許可權(EXECUTE),這樣的許可權設置,既能使用戶查看到業務數據,又能避免用戶私自修改數據。

對於數據的讀取許可權,SQL Server內置固定資料庫角色 db_datareader,把用戶添加到該角色中,用戶就被授予了對資料庫中所有數據(表或視圖)的讀取許可權;也可以逆向思考,不允許用戶修改數據,把用戶添加到固定資料庫角色 db_denydatawriter 中,這樣,用戶不能添加,更新和刪除任何數據,就是說,不能對任何數據表執行insert,updae和delete命令。許可權管理是個技術活。

一,授予查看定義的許可權

查看資料庫對象的許可權是VIEW DEFINITION,通常資料庫對象是指:數據表,視圖,存儲過程,函數等,被授予VIEW DEFINITION許可權之後,用戶只能查看定義,而無法從數據表或視圖中查看數據,無法執行SP和函數等。

1,授予SQL Server實例級別的查看定義的許可權

以下代碼用於授予許可權VIEW ANY DEFINITION,代碼必須在master資料庫中執行,使指定的用戶能夠查看當前SQL Server實例中的所有資料庫對象的定義:

use mastergogrant view any definition to [domainuser]

2,授予User,只能查看當前資料庫對象的定義的許可權

以下代碼用於授予VIEW DEFINITION,使指定的用戶能夠查看指定資料庫中的所有對象的定義:

use db_namegogrant view definition to [domainuser]

3,授予User,只能查看當前資料庫的指定資料庫對象的定義的許可權

以下代碼用於授予VIEW DEFINITION,通過on子句,使指定的用戶能夠查看指定對象的定義:

use db_namegogrant view definition

二,授予執行存儲過程的許可權

以下代碼授予用戶執行存儲過程的許可權,通過on子句指定用戶只能執行特定的SP:

use db_namegogrant execute on object::schema_name.object_nameto [domainuser]

如果grant execute省略on子句,表示所有的SP,這樣,用戶可以執行資料庫中的所有SP:

use db_namegogrant execute to [domainuser]

三,授予用戶修改存儲過程的許可權

修改存儲過程的許可權是ALTER,但是,ALTER同時也能修改表結構,視圖定義等資料庫對象,如下代碼所示:

GRANT ALTER TO [domainuser]

如果僅授予用戶修改SP的許可權,那麼必須逐個設置,或者把SP創建在獨立的schema下,通過授予用戶修改schema,達到控制用戶只修改SP的目的:

GRANT ALTER ON SCHEMA::proc_schemaTO [domainuser]

四,授予用戶查看SP的定義,執行和修改SP的許可權

通過GRANT子句,可以一次性把查看SP的定義,執行和修改SP的許可權都授予指定的用戶:

GRANT ALTER, EXECUTE, VIEW DEFINITION

在GRANT子句中省略ON子句,表示授予用戶的許可權作用於所有的資料庫對象,包括數據表,視圖,存儲過程,函數等。

五,授予Public用戶查看定義的許可權

當Login沒有映射到相應的User時,該Login被映射到默認的Public,設置給用戶查看定義的許可權,這樣,每個登陸到SQL Server實例的用戶,都可以查看定義。

use master

六,授予用戶查看定義,只讀數據和執行SP的許可權

存儲過程 sp_msforeachdb @command 是微軟未公開的存儲過程,該存儲過程遍歷當前的SQL Server實例的所有資料庫,在每個資料庫中執行相同的命令:

View Code

遍歷資料庫的功能,也可以使用游標來實現,本文不再贅述。

文章摘自博客園


更多IT精品課程,訪問中公優就業官網:http://xue.ujiuye.com

勤工儉學計劃」,給你一個真正0元學習IT技術的機會!

http://www.ujiuye.com/zt/qgjx/?wt.bd=lsh

找工作太難?不是你不行,我們來幫你!

http://www.ujiuye.com/zt/jyfc/?wt.bd=lsh

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

競態與死鎖的詳解!
JVM學習記錄:垃圾收集演算法
回首2010,是什麼決定了BAT三巨頭的格局?
有人告訴我一篇文章就可以學會Gulp(Getting started with Gulp)!你敢信?

TAG:IT優就業 |

您可能感興趣

Python和Scala的定義變數
簡單定義Python和Scala的類和對象
SpriteJS:重新定義Canvas API
BeatMods可以修復《Beat Saber》自定義歌曲和Mods
刷新你對奢華的定義!Eric Emanuel x Crazy BYW 即將發售
Android使用Canvas和Path自定義繪製動畫
iOS12新增Short Cut功能,支持第三方自定義Siri控制
Substratum主題不能玩了!Android P刪除自定義疊加層
live like a model-不願被定義 開講了,超模Pilates導師
一句話無法定義,這就是AdidasTubular | Xsneaker
沒人能在 Jake Phelps 和他的《Thrasher》面前定義什麼是「酷」
Facebook更新Spaces,開放虛擬形象自定義
Clare Waight Keller正在重新定義Givenchy
iPhone XS Max 雙卡還能這麼玩:自定義 emjio 表情標籤
如何在CUDA中為Transformer編寫一個PyTorch自定義層
Python Flask,資料庫,SQLAlchemy,模型類的定義,資料庫添加
創意PC頂點Surface Studio 2測評:堅持定義自我 完善設計動力
All You Need is IMC 超模新勢力,由你來定義!
賦能軟體定義 SUSE Linux Enterprise 15要做IT轉型的「橋樑」
ES6 Class Methods 定義方式的差異