凭证和代理

在SQL Server中,凭证(Credential)用于把Windows用户的身份验证信息(在Windows环境下,是Windows 用户名和密码)存储在SQL Server实例中,并把该身份验证信息传递给Login和Proxy,使其有权限访问SQL Server实例之外的资源。在SQL Server安全体系中,Login用于登陆SQL Server实例,用户通过Login登陆到SQL Server实例,在权限规定的范围内,访问SQL Server实例内部的资源,也就是说,Login权限的作用域是SQL Server 实例;而对于SQL Server实例外部的资源,访问权限是由操作系统Windows负责管控的,操作系统不识别SQL Server内部的Login,只识别Windows 用户(User),因此,SQL Server在访问实例外部的资源时,需要模拟Windows用户的身份来访问操作系统管理的资源。

由于凭证(Credential)包含访问 SQL Server 实例之外的资源所需要的身份验证信息,这使得Login通过凭证,有权限访问SQL Server实例之外的系统资源。一个凭证可以映射多个Login,一个Login只能映射到一个凭证,通过系统视图: sys.credentials  查看凭证信息。用户可以创建自定义的凭证,SQL Server在安装时也会自动创建系统凭证,并关联到特定的端点(EndPoint),系统凭证的名字以##打头。

一,凭证和Login

虽然Login有权限登陆SQL Server 实例,但是不具有访问SQL Server 实例之外的资源的权限。而凭证用于访问SQL Server 实例以外的资源,在创建Login时,把Login和凭证关联,Login就能通过凭证中存储的Windows账户访问SQL Server 实例之外的资源。如果以SQL Server 验证方式创建Login,并将该Login映射到凭证,那么该Login能够通过存储在凭证中的身份验证信息访问到 SQL Server 实例外部的资源。

1,创建凭证

Identity 指定凭证包含的Windows用户名,Secret指定Windows用户的密码,使用Identity参数指定的Windows用户连接SQL Server实例的外部资源。

CREATE CREDENTIAL credential_name 
WITH IDENTITY = 'windows_user', SECRET = 'password' 

2,将Login映射到凭证

一个Login只能映射到一个凭证,多个Login能够映射到同一个凭证。

CREATE CREDENTIAL AlterEgo 
WITH IDENTITY = 'Mary5', SECRET = '';

ALTER LOGIN Login1
WITH CREDENTIAL = AlterEgo;
GO

3,使用TSQL命令修改凭证的密码

ALTER CREDENTIAL credential_name 
WITH IDENTITY = N'domain\username', SECRET = N'new_password'

当然,也能通过SSMS的UI修改凭证的密码,打开Server级别的Security,修改Credentials目录下的凭证:

二,凭证和Proxy

SQL Server Agent在执行Job Step时,使用两种类型的权限,分别是Job Owner和代理(Proxy),Proxy包含凭证(Credential),定义Job Step的安全上下文(Security Context),在Job Step执行之前,Agent模拟凭证指定的Windows User的权限,在该权限范围(Security Context)内执行Job Step,使Job Step有权限访问SQL Server 实例之外的资源。

1,使用Proxy来执行Job Step

除了执行TSQL脚本的Job Step之外,其他Job Step必须使用Proxy,这以为着,Job Step必须运行在Proxy定义的安全上下文中,在创建Job Step时,必须在Run as 属性中指定Proxy。

在创建Proxy时,必须填写Proxy Name,Credential name和选择Agent子系统(Subsystem),Proxy的Description是可选的。

凭证和代理_第1张图片

2,授予Principal(Login, server role)访问Proxy的权限

在SQL Server中,不是所有的login都有权限访问Proxy。打开 New Proxy Account Wizard,在Principals Tab中,授予Principal(Login, server role)访问Proxy的权限。只有被授予访问Proxy权限的Principal,才能在Job Step中使用Proxy。默认情况下,固定服务器角色 sysadmin的成员有权限访问实例中的所有Proxy。

凭证和代理_第2张图片

如果Login有权限访问Proxy,或者Login属于有权限访问Proxy的服务器角色(Server Role),那么用户能够在Job Step中使用Proxy。

 

参考文档:

Creating SQL Server Agent Proxies

SQL Server DBA Tip: Credentials and Proxies

Credentials (Database Engine)

Security Questions: Logins, Credentials, and Proxies

你可能感兴趣的:(凭证和代理)