SQL Server 数据库项目的域帐户

Posted

技术标签:

【中文标题】SQL Server 数据库项目的域帐户【英文标题】:Domain Accounts for SQL Server Database Project 【发布时间】:2015-08-21 16:30:41 【问题描述】:

我有一个 SQL Server 数据库项目,我通过从客户端域上的数据库导入来填充该项目。我已获得通过域帐户访问此数据库的权限。此数据库的权限设置都是域帐户。

为了进行测试,我可以发布到 Visual Studio 中包含的本地 SQL Express 服务器。当我发布到本地服务器以在域中的开发机器上进行测试时,域帐户工作正常。

那么问题是,当我想在不在他们域中的机器上进行测试时,我如何才能离开域配置?有没有办法在本地实例中伪造域?目前脚本指向这些帐户的 WINDOWS。

编辑:我尝试过使用 AD LDS,但似乎 SQL 无法针对它进行身份验证?可能是我没有正确集成到WINDOWS中?

【问题讨论】:

【参考方案1】:

遗憾的是,这在 SSDT 中可不容易做到。我发现做到这一点的最佳方法是使用角色来处理安全性,使用角色成员资格来授予权限,并使用环境变量结合部署后脚本来处理权限。我从 Jamie Thomson 那里借用了这个想法,并在这里写了一篇博客:http://schottsql.blogspot.com/2013/05/ssdt-setting-different-permissions-per.html

这将允许您设置权限以在本地进行测试,但仍将数据库发布到其他地方并在每个环境中适当地设置权限。请记住在创建之前设置您的登录名/用户以检查它们是否存在。

【讨论】:

感谢您的回复!我试过你的脚本,它似乎运行得很好!我遇到了一个问题。开发人员机器没有域连接,所以我不能做这样的事情,比如让每个开发人员在他们的本地机器上创建我们将使用的三个组(DBO、W、R)然后只按名称引用组(用于创建用户/登录)。您知道在创建新用户时有什么方法可以获取当前域或当前用户吗?如果是这样,这将是我的完整答案。 修复了动态 SQL 的问题。 对于本地机器,我通常不理会权限或使用类似 SUSER_SNAME() 的东西。 :) 听起来您找到了适合您环境的解决方案。 我们需要检查不同的权限级别,所以我们有多个本地组,并且可以作为该组的用户运行我们的服务进行测试。我不想只是掩盖这一点,以防它在生产或 QA 中引起一些可能已经在开发中发现的问题。 您是否有机会使用数据库角色?这可以使它更容易测试。改变某人进入和退出各种角色。使用 SETUSER 或类似方法来更改上下文。如果将所有安全性分配给数据库角色,然后将用户/组添加到这些角色,您可以更好地控制安全性。我绝对建议将权限直接分配给用户/组。

以上是关于SQL Server 数据库项目的域帐户的主要内容,如果未能解决你的问题,请参考以下文章

修改域用户创建计算机帐户的数量

如何在NT帐户无效时恢复SQL Server所有权

在域帐户下运行的 WCF 服务

具有模拟的域范围委派

用户通过WEB方式更改AD域帐户密码

怎么修改计算机域的帐号和密码