2009-06-29 79 views
1

在多个环境中的多个数据库之间管理和维护SQL Server登录,服务器角色和单独访问权限的好方法是什么?你最好的做法是什么?SQL Server登录配置和自动化

我的情况有些信息:

  • SQL Server 2005的
  • 我们拥有具有相同模式的“客户”数据库施氮量(理论上至少)
  • 我们有一个中央“管理“数据库引用的每个客户端的数据库,并且可以保持配置值
  • 该‘管理/客户端’模式在多种环境(DEV/QA /级/ PROD)
  • 一些用户,如测试者复制,NE编基于环境现状不同的权利
  • 我们经常要拉客户数据库备份从一个环境到另一个恢复用于开发或测试目的
  • 我们保持我们的存储过程和脚本源控制和构建循环部署

现在我的组织很混乱,我们没有遵循良好的安全实践。我们没有正式的DBA。但是,如果我们有更复杂的情况,那么始终保持它始终是一件麻烦事。我可以看到迁移到新服务器或从灾难中恢复非常耗时,如果我们在哪里尝试直接通过Management Studio IDE进行配置。

回答

2

首先,为了使数据库恢复到不同的服务器更容易,请确保您的所有服务器上的登录都具有相同的SID,方法是使用Microsoft的sp_help_revlogin stored procedure在您创建的第一台服务器上编写登录脚本然后使用该脚本在其他服务器上创建登录。当您还原数据库时,这会使数据库用户正确映射到登录名。

根据环境的不同,在数据库级别拥有不同的权限将会成为一个麻烦,无论您如何角色化。我在主服务器上有一个存储过程,作为我的恢复过程的一部分,在我的开发服务器上调用,在数据库上执行额外的GRANT,以便开发人员进行更改。这是我能够想出来解决类似问题的最佳选择。

2

使权利更容易的一种方法是在数据库中创建名为Dev,QA,Test,Prod的卷并授予这些角色的正确权限。然后,当您将数据库还原到每个环境时,只需将开发人员放在正确的角色中即可。

1

我们使用活动目录组并强制Windows验证登录。在SQL Server中,我们可以通过为每个AD组创建一个SQL Server登录来基于用户所在的AD组来定义访问。不知道这是否比数据库角色更好或更差,但这意味着角色在每个数据库之外进行管理。

传播对数据库的访问是然后要么手动操作或短SQL脚本,以确保数据库中的点登录到一个有效的SQL Server登录(这又是一个AD组)。

一般情况下,这适用于一般情况。我们可以使用数据库角色,然后为每个AD组分配内置角色(例如,db_datareader)

很少有人需要对此模型之外的数据库进行某些特定访问。如果它不会成为侵入性或关键性的问题,我们最终可能会向整个组织开放,否则我们最终会创建必须单独管理的每个用户帐户。我们努力将这些保持在最低限度,并且时不时地清理它们,以免它们被滥用/遗忘。