我在 azure 中有一个网络应用程序。
我的解决方案如下:
- MyApp.Web
- MyApp.WebjobTasks
- MyApp.WebjobAnotherTask
网络作业是网络应用程序的一部分。它们都共享相同的数据层,以通过 Entity Framework 和 Azure 门户访问数据。当定义应用程序设置时,应用程序设置将在所有项目 Web 应用程序和 Web 作业配置文件中覆盖。
所有项目都有一个连接字符串键作为同一数据库的“DefaultConnection”。
但我想更改网络作业的用户(具有更多执行内务管理的权限)。因此,Webjob 应该能够更改/截断表,而 MyApp.Web 应该只有 db_datareader 和 _db_datawriter 角色。
我该如何多样化?如果我更改 Azure 门户中的连接字符串 key 以使用有权更改数据库的用户,那么这不是一个好的解决方案,面向公众的应用程序将被授予不必要的权限。
每个应用程序都应该在 Azure 门户中拥有自己的“应用程序设置”页面,这不太好。这样每个应用程序就可以运行不同的用户权限。
有没有更好的方法来实现这个目标?或者我应该在 webjobs 的 app.config 中添加新的用户和密码 key ,并在运行内务管理作业之前读取这些 key 来更新连接字符串?
最佳答案
我建议不要即时更改连接字符串
。这可能会产生竞争条件。
如果这些网络作业具有不同的职责,我建议为它们添加额外的连接字符串
。但是,如果您当前没有注入(inject)连接字符串
,则这可能需要额外的逻辑来创建DbContext
。
使用不同的连接字符串
,如果需要,可以更轻松地将 Web 作业迁移到另一个地方(即 Azure Functions 或其他),并且您的 Web 作业被限制执行不允许执行的数据库操作,如果作业仅设计用于清理审核日志,则类似于创建用户。
关于c# - Azure 应用服务中具有不同用户权限的单个连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772666/