在 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 = '<EnterStrongPasswordHere>';
- ALTER LOGIN Login1
- WITHCREDENTIAL= 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,使用 Job Owner 的权限来执行 Job
当 Job Step 的类型是 Transact-SQL Script 时,该类型的 Step 用于执行 TSQL 脚本,访问的资源都是 SQL Server 实例内部的,因此,不需要为该 Job Step 指定 Agent Proxy,Job Step 以 Job Owner 的权限上下文执行脚本代码。
2,使用 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 是可选的。
3,授予 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。
如果 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
来源: http://www.cnblogs.com/ljhdo/p/5611460.html