close

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

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

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

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

居然失敗。

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

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

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

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

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

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

步驟二:如下圖所示,我們的確是用windows帳號登入。我們在SQL上建立一個DB叫TestDB。
步驟三:我們去看一下實體檔案TestDB.mdf安全性,目前該DB一建起來有三個群組可以存取,當然也包括MSSQLSERVER群組。
步驟四:此時我們卸離TestDB資料庫。
步驟五:完成上步驟卸離後,我們再去看看實體檔案的安全性。此時我們會發現只剩下Administrators群組可以存取檔案。

步驟六:我們另外開一個連線改用SQL登入,下圖aa這一個登入帳號是sysadmin。
步驟七:我們用剛剛SQL帳號登入的連線來將我們在步驟四卸離的TestDB附加回來。此時你會發現如下圖的狀況,SQL因權限不足導致無法附加資料庫上去。

步驟八:我們改用windows帳號(administrators群組)登入的連線再重做一次附加的作業,如下圖所示附加成功。
步驟九:完成步驟八附加後。我們再一次來卸離資料庫,但這一次改用SQL的登入連線來做。

如下圖所示卸離成功。

步驟十:此時再會去看看實體檔案安全性,會發現MSSQLSERVER群組還是有權限存去檔案。
步驟十一:因此這一次我們就可以使用SQL帳號登入的連線成功的附加資料庫上去。
PS.希望如果有人知道系統為何會有這樣的權限設計,可以分享給大家知道。因為我的想法是

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

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

文章出處:http://www.dotblogs.com.tw/rockchang/archive/2014/...



arrow
arrow
    文章標籤
    SQL Server 資料庫 權限
    全站熱搜
    創作者介紹
    創作者 Johnson峰 的頭像
    Johnson峰

    Johnson峰的部落格

    Johnson峰 發表在 痞客邦 留言(0) 人氣()