1. 程式人生 > >SQL Server 只讀賬號/只讀登入名可檢視儲存過程及函式許可權

SQL Server 只讀賬號/只讀登入名可檢視儲存過程及函式許可權

公司為了收緊生產資料庫的登入名,目前我們公司生產資料庫登入名基本賦予了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,因為儲存過程太長就不貼上複製。