如何快速切换工作阶段的执内联容
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叙述的调用者。
参考数据:
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