考虑一个公开单个Web UI但使用同一数据库模式的多个实例的系统。假设每个用户属于某个较大的实体,称之为“组织”,每个组织都有自己的数据库实例。当用户登录时,系统应确定要使用的DB实例。
表面上出现这样的系统,要求将连接字符串存储在集中式数据库中。乍一看,系统仍然需要集中式数据库,这似乎打败了每个组织拥有自己的数据库的目的。其次,我已经读过,首先将连接字符串存储在数据库中是不可取的。作为最后的观察,我认为将用户登录信息映射到连接字符串是系统确定使用哪个数据库实例的唯一方法似乎很幼稚,但我想不出替代方案。
答案 0 :(得分:0)
不,可能有其他选择,具体取决于用户标识符。例如,如果您使用电子邮件地址来识别用户并且可以确保每个组织仅使用一组已知(和唯一)域,则可以单独在域部分上选择正确的数据库。您可以将域数据库信息存储在单独的中央数据库中。请注意,您只需在此中央数据库中存储具有数据库名称(不是所有连接详细信息)的字符串,详细信息可能来自启动时的某些属性文件(将数据库名称映射到连接详细信息)。
或者,您可以使用用户凭据查询所有数据库,直到找到“正确”的数据库。
这很难说。如果中央数据库只包含登录信息(例如其他跨组织数据),则组织特定的数据库仍然可以包含特定于组织的数据。例如,它可能具有稍微不同的模式,它可能要求某种加密,或者您对每个数据库的用户有不同的访问限制等。我已经看到组织(客户端)的请求特别要求数据“单独”存储其他组织,出于安全考虑。
(+ 4。)您不需要需要连接字符串存储在某个中央数据库中以支持此方案。您可以在启动时为所有组织DB启动连接池,因此您不需要在(稍后)运行时处理连接详细信息。需要考虑的最大问题是安全性:如果有人可以访问连接细节,会发生什么?他可能会用它来从其他数据库中检索所有数据。因此,它归结为您可以保护此连接数据有多好,例如,您几乎肯定不希望在某些数据库中以未加密的方式存储此信息。