Security5:Execute AS 和 impersonate 权限

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 权限)