标签:
principal 是统称,包括login,user,role等,可以向作为安全主体的用户授予权限,principal分为server level和database level。
登录名是Server级别的Principal,作用域是整个数据库引擎。若要连接 SQL Server 实例上的特定数据库,登录名必须映射到数据库用户。数据库内的权限是向数据库用户而不是登录名授予和拒绝授予的。
数据库用户是数据库级别安全主体,作用域是数据库,登录名必须映射到数据库用户才能连接到数据库。一个登录名可以作为不同用户映射到不同的数据库,但在每个数据库中只能作为一个用户进行映射。
一,concept解释
login用于登录server,验证方式有两种,Windows 验证和Sql Server 验证。
user用于访问DB,使用login登陆到server之后,必须Mapping到user,才能访问db,否则不能访问DB。
Login提供登录Server的帐号和密码,User用于访问db,role是权限的集合,限制User访问的资源。user只有担当某一个角色或具有某些权限,才能访问db。
二,Execute AS 和 impersonate 权限 示例
USE db_study; GO --Create two temporary principals CREATE LOGIN login1 WITH PASSWORD = ‘123‘ ,DEFAULT_DATABASE=db_study ,CHECK_EXPIRATION=off ,CHECK_POLICY=off; go CREATE LOGIN login2 WITH PASSWORD = ‘123‘ ,DEFAULT_DATABASE=db_study ,CHECK_EXPIRATION=off ,CHECK_POLICY=off; go CREATE USER user1 FOR LOGIN login1 with default_schema=dbo; GO CREATE USER user2 FOR LOGIN login2 with default_schema=dbo; GO --Give IMPERSONATE permissions on user2 to user1 --so that user1 can successfully set the execution context to user2. GRANT IMPERSONATE ON USER:: user2 TO user1; GO --Display current execution context. SELECT SUSER_NAME(), USER_NAME(); -- Set the execution context to login1. EXECUTE AS LOGIN = ‘login1‘; --Verify the execution context is now login1. SELECT SUSER_NAME(), USER_NAME(); --Login1 sets the execution context to login2. EXECUTE AS USER = ‘user2‘; --Display current execution context. SELECT SUSER_NAME(), USER_NAME(); -- The execution context stack now has three principals: the originating caller, login1 and login2. --The following REVERT statements will reset the execution context to the previous context. REVERT; --Display current execution context. SELECT SUSER_NAME(), USER_NAME(); REVERT; --Display current execution context. SELECT SUSER_NAME(), USER_NAME(); --Remove temporary principals. DROP LOGIN login1; DROP LOGIN login2; DROP USER user1; DROP USER user2; GO
参考文档:
EXECUTE AS Clause (Transact-SQL)
Security5:Execute AS 和 impersonate 权限
标签:
原文地址:http://www.cnblogs.com/ljhdo/p/4996060.html