SQL Server在卸離資料庫後,該資料庫檔案(mdf及ldf)權限變化問題

  • 9156
  • 0

SQL Server在卸離資料庫後,該資料庫檔案(mdf及ldf)權限變化問題

會發現這一種權限變化也是無意間的,所以是怎樣發現的,我也忘記了。

但是也因為這一個發現,解開我以前遇見的一個問題。

 

之前我想要將一個DB由一台SQL移機到另一個SQL,因此我卸離了該資料庫,

並將檔案複製到另一台SQL上去。此時我在另一台SQL上要附加該資料庫時,

居然失敗。

我已為是檔案在搬移過程有損毀,因此重搬一次再附加,但還是發生失敗。

此時我仔細看一下錯誤訊息,發先是SQL權限不足導致無法附加檔案而失敗,

所以當時我就去改了mdf及ldf的安全性設定,讓SQL可以順利附加資料庫。

 

當時沒仔細想為何會發生這樣的狀況,只想說是權限不足造成。直到近日無意間

發生同樣的事,我才仔細研究一下。瞭解有這種情形後,筆記一下免得日後又踩雷。

 

 

步驟一:如下圖所示我們先使用windows登入方式來登入SQL Server

1

 

 

步驟二:如下圖所示,我們的確是用windows帳號登入。我們在SQL上建立一個

DB叫TestDB。

2

 

 

步驟三:我們去看一下實體檔案TestDB.mdf安全性,目前該DB一建起來有三個群組可以存取

,當然也包括MSSQLSERVER群組。

3

 

 

 

步驟四:此時我們卸離TestDB資料庫。

4

 

 

步驟五:完成上步驟卸離後,我們再去看看實體檔案的安全性。此時我們會發現只剩下Administrators

群組可以存取檔案。

5

 

 

步驟六:我們另外開一個連線改用SQL登入,下圖aa這一個登入帳號是sysadmin。

6

 

 

 

步驟七:我們用剛剛SQL帳號登入的連線來將我們在步驟四卸離的TestDB附加回來。此時你會發現

如下圖的狀況,SQL因權限不足導致無法附加資料庫上去。

7

 

 

步驟八:我們改用windows帳號(administrators群組)登入的連線再重做一次附加的作業,如下圖所示附加成功。

8

 

 

步驟九:完成步驟八附加後。我們再一次來卸離資料庫,但這一次改用SQL的登入連線來做。

如下圖所示卸離成功。

9

 

 

步驟十:此時再會去看看實體檔案安全性,會發現MSSQLSERVER群組還是有權限存去檔案。

10

 

 

步驟十一:因此這一次我們就可以使用SQL帳號登入的連線成功的附加資料庫上去。

11

 

 

PS.希望如果有人知道系統為何會有這樣的權限設計,可以分享給大家知道。因為我的想法是

SQL要做SQL外的事情時,會使用SQL的啟動帳號來做,因此該啟動帳號有什權限就能做什麼事。

但是附加資料庫似乎不是利用SQL的啟動帳號來做的,所以才有這樣的問題產生。

我是ROCK

rockchang@mails.fju.edu.tw