如何快速切換工作階段的執行內容
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等系統資料庫。
實務上為了安全性及權限分工通常會依照業務上的需求,建立多個Login讓前端程式可以使用各自的帳號登入SQL Server,進而設定Login可以使用的資料庫及對應至User的細部權限,設定完畢之後若要測試權限設定是否正確無誤,以SSMS操作為例,必須登出目前使用者在重新以其他使用者登入後進行測試,雖然這種方法可以達到上述目的,但有更方便的方法可以快速切換預設工作階段(session)的執行內容。
假設先以sa登入SQL Server(如下圖)接著透過SUSER_NAME和USER_NAME函數查詢目前工作階段的Login和User名稱。
接著以【Execute AS Login = 'MarketUser'】指令切換使用者為MarketUser,模擬以該Login登入SQL Server就不需重新登出再登入。
1: EXECUTE AS LOGIN = 'MarketUser'
2: SELECT SUSER_NAME() as [login],USER_NAME() as [user]
若模擬完畢要恢復成一開始登入的Login,則只要使用【Revert】函數即可回到最後一個Execute AS敘述的呼叫者。
參考資料: