警告: 好的,所以这可能没有必要,但我的标准安全心态是尽可能地使事情变得更加困难,然后根据需要进行简化。 / p>
目前,我是Azure(SQL Server和移动服务)基础软件系统的唯一开发人员。
虽然整个系统旨在使用Azure移动服务API访问其SQL Server数据库,但我在开发和测试期间使用SSMS管理数据库,并且我必须创建防火墙规则允许此访问权限。如果这个项目扩展(看起来可能在接下来的几个月内),我需要让其他数据库管理员/开发人员访问一些相同的资源。这没关系,但考虑到我们将要处理的一些数据的敏感性,我想在一天结束时自动使这些Azure SQL Server防火墙规则无效。我意识到这需要在每个工作日开始时重新创建。 我很满意。
根据我的阅读,似乎有3种不同的方式以编程方式管理Azure SQL Server防火墙规则:
sp_delete_firewall_rule
)DELETE
至https://management.core...
)Remove-AzureSqlDatabaseServerFirewallRule
)我真的不关心它是如何完成的,但我已经使用移动服务调度程序作业来使密码重置令牌失效(完全与当前任务无关),所以我想我会给技术一枪。
这是尝试:
function ClearSqlServerFirewalls() {
var sql = 'Exec sp_delete_firewall_rule ?';
mssql.query(sql, ['name'], {
success: function (results) {
console.log(results);
}
});
}
在一个非常令人惊讶的结果中,我收到了以下错误:
User must be in the master database.
好的,这是有道理的,因为这是一个系统范围的效果,而不是特定于数据库的效果。 Azure显然为每个数据库创建一个特定的SQL用户,并通过该用户运行所有移动服务代码。由于该用户没有数据库范围的访问权限,因此没有骰子。
所以,以下是我目前对此的看法:
有什么办法可以做我想做的事吗?让Azure用户访问master
数据库(如果可能的话)似乎是一个糟糕的解决方案。
是的,我意识到这看起来有点矫枉过正,但如果我拥有正确的凭据,我可以为任何地方添加IP规则。说我在工作午餐,需要访问。我添加规则并开始工作。但是说我忘了这个规则,它可能只是坐在那里作为对那些进入同一网络的人的公开邀请。我意识到这是 稍微 偏执,但我认为防火墙规则可以带有内置过期也是合乎逻辑的。我错过了什么吗?
答案 0 :(得分:1)
我认为这样做的好方法是使用Azure Automation for PowerShell命令行开关 - 例如,可以每天安排一次,并且可以构建完整的Powershell管理管道。 https://azure.microsoft.com/en-us/documentation/articles/sql-database-firewall-configure/
看看基于云的图形工具: https://blogs.endjin.com/2016/03/using-azure-automation-to-run-vms-during-office-hours-only-using-graphical-runbooks/ 基本上,您需要将主要部分更改为SQL Azure命令行开关。
如果这是有用的答案,请将其标记为有用或作为答案。谢谢!