SQL Server Permissions:View Server State

SQL Server Permissions:View Server State

緣由:

Techdays2012時,楊老師的10個問題裡,有一個問題是『你的SQL Server還是活著嗎?』

Techdays2013時老師又有一個『你知道SQL Server Agent已經停止的嗎?』

 

    當時有聽老師在講,但實際上也沒確實去做。因為老師在檢查SQL是否還是活著,

是用已註冊在中央管理伺服器中的SQL Server清單然後搭配Openrowset的方式去

連結每一台SQL Server,因此只要有TimeOut的情況就表示該SQL Server有問題。

而中央管理伺服器需在網域的狀態下才能用,而我的SQL主機很多都沒有加入網域,

所以也就沒做。

                   

    至於SQL Agent的部分,老師是在OS中排程去執行某一段已經寫好的Script去檢查

sysprocesses中是否有AgentSession(不可能用Agent去排程檢查Agent是否停了)

。但由於每台Server都要在OS上設定再加上自己覺得Agent應該不太可能會起不來,

所以也沒做。

                   

直到某一日兩個狀況都被我碰見了,才毅然決然的決定該好好監測這兩大問題。

 

解決方式:

我的作法是找一部HA機制較好的SQL,然後依老師的作法在OS中設排程去檢查自己

SQL Agent是否還活著。然後用這一台SQL去掃其他所有的SQL主機是否有Agent

Session。所以我做一次掃瞄,如果Connection TimeOut就表示SQL服務沒有起來。

如果有Connection上但是沒有AgentSession,那就表示該SQLAgent沒有起來。

 

因此我在所有SQL上建立一個sqlislivelogin帳號(最小權限),然後在負責偵測的

SQL Server上也是用OpenrowsetConnection所有SQL

Select program_name From master.dbo.sysprocesses Where program_name like 'SQLAgent%'

 

但是我遇見一個問題,由於sqlislive是最小權限,該帳號可以Connection,但是卻無權

限看到所有的processes,因此當然也查不到AgentSession了。

 

拉哩拉渣寫一堆的主題終於到了,查了一下資料,在這一個討論串中得到解答。就是應

該給sqlislive帳號 VIEW SERVER STATE的權限,語法:

Grant VIEW SERVER STATE to sqlislive

 

 

最小權限時只能看見自己的Session

clip_image002[4]

 

當我們授與該帳號View Server State權限後,就可以看見所有Session

clip_image004[4]

 

我是ROCK

rockchang@mails.fju.edu.tw