问题
同一团队中的开发人员是 Windows_Group 的成员。这些开发商创造了他们各自拥有的就业机会。只有所有者才能编辑作业,因此他们不能一起处理同一作业。因此,我们最终会得到同一个工作的多个版本。
主意
我可以将 映射[Domain\Windows_Group]
到 a [Domain\Windows_User]
,以便作业需要由 [Domain\Windows_User] 帐户运行和拥有吗?
示例代码
我会错过什么或冒什么风险?
USE [master]
GO
CREATE LOGIN [DOMAIN\Windows_Group] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
USE [msdb]
GO
CREATE USER [Domain\Windows_User] FOR LOGIN [DOMAIN\Windows_Group]
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [Domain\Windows_User]
GO
我只会在我们的开发环境中这样做。开发人员没有 db_owner 或任何安全角色的访问权限。
测试
这将在新服务器上使用,目前只是一个理论,所以我还没有开发人员进行测试。
当您添加登录用户(AD/Windows 中的一个组)并且该 AD 组中的某人创建作业时,SQL 将提取创建该作业的AD 用户的 SID ,并将该 sid 记录为该作业的所有者。工作。
即,当该 AD 组中的其他人尝试修改作业时,它会失败,因为其他人拥有该作业。
您可能已经知道上面的内容,但只是为了确保我们在同一页面上。现在,回答你的问题:
“我可以将 [Domain\Windows_Group] 映射到 [Domain\Windows_User],以便作业需要由 [Domain\Windows_User] 帐户运行和拥有吗?”
你问的问题没有任何意义,有点。如果你重读我上面的句子,你就会明白为什么。创建该作业的个人 sid 仍将是该作业的所有者。
我所做的是为我的 BI 人员创建一个存储过程,允许他们更改作业的所有者。即,我们有我上面列出的设置。因此,当AD 组中的其他人需要修改作业时,该人必须首先获得该作业的所有权。
我最近推出了这个解决方案,所以时间会告诉我们是否存在任何不可预见的问题。
您需要了解代理和 SQL Server 中的安全性才能解决此问题。即,对于非 TSQL 作业步骤,您的用户将使用凭证/代理代理。对于 T-SQL 作业步骤,所有相关方都需要了解 SQL 在执行您要求的 SQL 时执行 EXECUTE AS LOGIN(即,注意 T-SQL 作业步骤的身份/权限差异)。
哦,您开发供他们使用的过程应该使用 EXECUTE AS 'dbo' 属性或使用模块签名 - 因此允许更改作业的所有者。最后,在该过程中添加适当的保障措施。例如,我不允许他们将作业的所有者更改为系统管理员。