我们有一个使用SQL类型提供程序的FSharp项目,这意味着在构建过程中,我们需要访问目标SQL Server数据库。对于调试版本,这是我们自己的本地计算机,可以在其中使用集成安全性,但是我们的测试和生产版本指向Azure SQL数据库。直到最近,我们一直在遵循“绝对不是最佳实践”的做法,即在源代码中存储类型提供程序使用的SQL Server帐户的密码,以简化编译过程。
我们需要避免这种情况,因为这是一个非常明显且令人讨厌的安全风险。
问题是用什么代替它。 Azure SQL不支持“集成安全性”,因此我们不能执行以下操作:
<connectionStrings>
<add name="OurDatabaseConnection" connectionString="Data Source=ourserver.database.windows.net,1433;Initial Catalog=OurDatabase;Integrated Security=True;MultipleActiveResultSets=True;Encrypt=True;" />
</connectionStrings>
另一种实现方法涉及Azure Active Directory。但是,如果使用“带有密码的Active Directory”方法,则仍会将密码存储在源中(或至少存储在文件中的某个位置)。
<connectionStrings>
<add name="OurDatabaseConnection" connectionString="Data Source=ourserver.database.windows.net; Authentication=Active Directory Password; Initial Catalog=OurDatabase; UID=bob@contoso.onmicrosoft.com; PWD=MyPassWord!" />
</connectionStrings>
如果每个人都在自己的计算机上进行部署,那可能是可行的:您可以让人们将带有AD密码的文件以纯文本格式复制到适当的目录中。那不是很好,但是也许可以吗?但是,我们使用共享计算机进行部署,因此该解决方案效果不佳。
您还可以使用AD令牌,但是这要求对应用程序进行特定的编码,以使其了解Azure AD,据我所知,FSharp类型提供程序并非如此。至少,谷歌搜索没有发现任何东西。
在这种情况下其他人会做什么?