远程授予对SQL数据库角色的权限

时间:2011-03-14 21:15:26

标签: sql-server sql-server-2008

我正在为我的公司进行短期灾难恢复规划工作,我们计划在主要交易服务器死亡时使用复制的报告服务器作为热备件。

我们的Web应用程序可以写入该事务服务器,但只具有SQL角色给出的某些权限。 (webapplication)我想给我们一种更新此角色的方法,该角色也会更新与其他服务器上存在的角色相同的角色。这样,如果我们故障转移到另一台服务器,我们的webapplication角色合理地接近相同,如果不完全相同的话。 (我真的不担心有人直接更新它)

所以,我有一个MakeWebWriteable过程应该生成并执行一些代码,如下所示。除此之外,以下内容显然不起作用。我对如何引用该角色并在远程服务器上更新它感到茫然。我考虑过使用exec (@sql) at [reporting\server],但我不确定如何在其中引用某个数据库的角色对象。

grant insert, update, delete on dbo.TableName to webapplication
grant insert, update, delete on [reporting\server].DBName.dbo.TableName to [reporting\server].DBName.dbo.webapplication

我怎么能这样做,还是有更好的想法? (即复制)

<小时/> 编辑1:我们通常将迁移编写为SQL脚本,将其提交到SVN,并使用同步脚本更新我们的数据库 - 有点像RoR中的流程,只有没有模型 - &gt; SQL翻译。理想情况下,如果我们希望表可以写入Web,我们只需在迁移结束时添加一行,我们在其中添加了这样的表。

-- Code to create NewTable...

if object_id('SetWebWriteable') is not null
    exec SetWebWriteable @tableName = 'NewTable'

这样,我们的开发人员机器上没有任何反应,但在我们的测试和生产环境中,会发生正确的操作。如果角色可以自动复制,那么我们自然不需要这样做。

1 个答案:

答案 0 :(得分:0)

根据您的描述,您需要SQLCMD实用程序。使用它接受的凭据连接到任何服务器(我通常使用-E代表Windows身份验证)并执行您需要的任何脚本。如果您不信任,请创建一个具有足够凭据的帐户。

问题是:执行此脚本的触发器是什么?你可以手动执行它,还是应该自动启动它。在这种情况下,你必须编写一些代码来实现它(虽然不是很困难)。

并且您可以利用SQL Server 2008中内置的PowerShell,它可以对任何服务器上的对象进行操作您可以连接到(使用您的凭据)。看看那个。它有一个cmdlet Invoke-Sqlcmd,可以帮助TON。