如何快速切換工作階段的執行內容

如何快速切換工作階段的執行內容

SQL Server的權限檢查分為伺服器層級與資料庫層級,前者稱之為Login(登入),用來控管該登入於SQL Server的各項權限;後者稱之為User(使用者),用來控管該使用者於資料庫的各項權限。從使用層級看來Login為整個SQL Server Instance(執行個體)共用,而每個系統資料庫或使用者自訂資料庫都可有自己的User,各資料庫的User彼此是各自獨立的。當我們於前端不論是透過應用程式連線字串或SSMS(SQL Server Management Studio)連接到SQL Server前,必須先建立Login並且設定該Login對應到資料庫的哪個User及其預設結構描述(如下圖),由此可知即使可以登入SQL Server,在預設沒有建立與資料庫User的對應關係前,只能存取master、msdb及tempdb等系統資料庫。

image

實務上為了安全性及權限分工通常會依照業務上的需求,建立多個Login讓前端程式可以使用各自的帳號登入SQL Server,進而設定Login可以使用的資料庫及對應至User的細部權限,設定完畢之後若要測試權限設定是否正確無誤,以SSMS操作為例,必須登出目前使用者在重新以其他使用者登入後進行測試,雖然這種方法可以達到上述目的,但有更方便的方法可以快速切換預設工作階段(session)的執行內容。

image

假設先以sa登入SQL Server(如下圖)接著透過SUSER_NAME和USER_NAME函數查詢目前工作階段的Login和User名稱。

image

接著以【Execute AS Login = 'MarketUser'】指令切換使用者為MarketUser,模擬以該Login登入SQL Server就不需重新登出再登入。

   1:  EXECUTE AS LOGIN = 'MarketUser'
   2:  SELECT SUSER_NAME() as [login],USER_NAME() as [user]

image

若模擬完畢要恢復成一開始登入的Login,則只要使用【Revert】函數即可回到最後一個Execute AS敘述的呼叫者。

image

參考資料:

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHT/s10de_6tsql/html/613b8271-7f7d-4378-b7a2-5a7698551dbd.htm

http://msdn.microsoft.com/zh-tw/library/ms187934.aspx

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHT/s10de_6tsql/html/4688b17a-dfd1-4f03-8db4-273a401f879f.htm

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHT/s10de_6tsql/html/ae598d9f-9baa-49b8-b1c1-042854206de4.htm