SQL Server 只讀賬號/只讀登入名可檢視儲存過程及函式許可權
阿新 • • 發佈:2018-12-14
公司為了收緊生產資料庫的登入名,目前我們公司生產資料庫登入名基本賦予了sa賬戶的許可權,這樣做是很危險的,所以領導要求給運維同事授予資料庫只讀查詢的賬號,但同時又需要讓運維同事可檢視儲存過程,因為儲存過程和函式中有很多攔截異常的判斷,當提示報錯內容時,運維同事可以通過報錯的關鍵字來查詢錯誤是來自程式、儲存過程或者是函式等等。
如下是通過關鍵字查詢“自動化裝置傳入重量為空!請重新稱重”:
SELECT NAME,[type],CASE WHEN [type]='F' THEN N'FOREIGN KEY 約束'WHEN [type]='FN' THEN N'標量函式'WHEN [type]='IF' THEN N'內聯表值函式' WHEN [type]='IT' THEN N'內部表'WHEN [type]='P' THEN N'儲存過程'WHEN [type]='PK' THEN N'PRIMARY KEY 約束' WHEN [type]='S' THEN N'系統基表'WHEN [type]='TF' THEN N'表值函式'WHEN [type]='U' THEN N'表(使用者定義型別' WHEN [type]='UQ' THEN N'UNIQUE 約束'WHEN [type]='V' THEN N'表值函式' WHEN [type]='TR' THEN N'觸發器' ELSE N'不知名名的' END AS 型別名稱,create_date,modify_date FROM sys.objects (nolock) WHERE [object_id] IN (SELECT id FROM sys.syscomments(NOLOCK) WHERE [text] LIKE N'%自動化裝置傳入重量為空!請重新稱重%') ORDER BY modify_date DESC
如下是通過關鍵字找到該報錯來自於儲存過程“Autogetweight_sp”中
NAME type 型別名稱 create_date modify_date -------------------------------------------------------------------------------------------------------------------------------- ---- -------------- ----------------------- ----------------------- Autogetweight_sp P 儲存過程 2017-04-28 10:00:47.080 2018-09-10 10:16:53.450 (1 行受影響)
如下是通過只讀賬戶queryuser(我自己建的只讀賬戶)來檢視上面找到的儲存過程Autogetweight_sp
sp_helptext 'Autogetweight_sp'--這是檢視整個儲存過程,如果沒有授權只讀賬戶訪問儲存過程的許可權,將會報錯。
訊息 15009,級別 16,狀態 1,過程 sp_helptext,行 54 [批起始行 0]
物件 'Autogetweight_sp' 在資料庫 '我的生產資料庫名' 中不存在或對於此操作無效。
如下開啟/撤銷只讀賬戶可訪問儲存過程
USE TCsfc--(生產資料庫名) GRANT VIEW Definition TO queryuser--開啟,只讀賬戶queryuser在TCsfc資料庫中可檢視儲存過程及標量值函式的許可權 USE TCsfc--(生產資料庫名) REVOKE VIEW Definition TO queryuser--撤銷,只讀賬戶queryuser在TCsfc資料庫中可檢視儲存過程及標量值函式的許可權
開啟訪問後通過只讀賬戶queryuser來檢視上面找到的儲存過程Autogetweight_sp,因為儲存過程太長就不貼上複製。