2009-02-17 58 views
13

我想知道你用什么技术为你的应用程序存储数据库凭证。我特别关心java webapps,但我不认为有必要限制这些问题。将数据库凭据存储在Web应用程序中的位置?

需要考虑的事项:
您是否使用属性文件,xml configs,other?
它被捆绑到您的应用程序(即在一个jar文件中)或单独存储在文件系统的某个地方?
密码是否加密?如果是这样,你使用什么加密方案?

回答

5

对于Java,数据库连接池应该由容器传递给webapps。这是作为资源在WEB-INF/web.xml中声明的标准。这同样适用于邮件会话和可能因安装而异的其他外部资源。查看JNDI以获得更多关于此的信息)

与此相关的好处是应用程序不关心如何实际连接到任何外部。它不会看到任何密码,因为容器本身会使用它们。

在tomcat中,这是通过conf/Catalina/localhost /,conf/server.xml中的上下文文件(或仅适用于开发环境)从webapps META-INF/context.xml配置的。其他环境有自己的配置位置或应用程序。

密码的加密实际上取决于容器。 Tomcat以明文形式存储它们,但应用程序本身不会看到它。我不了解其他环境中的机制。

3

取决于应用服务器。

我通常对数据源使用JNDI查找,因此凭据存储在处理连接池的应用服务器上。无需在配置中添加JNDI名称以外的任何其他内容。

是的,密码在WebLogic上加密。

在Tomcat上的东西可能是冒险的。连接信息在META-INF/context.xml中,表示密码的纯文本。我只是为了发展而做,而不是在生产。

8

由于您将问题留给平台,我将添加.NET应用程序的数据库凭据存储在web.config文件中。从版本2.0及以上版本开始,有一个特定的ConnectionStrings部分,可以更方便地编程访问连接字符串。

除了让IIS自动阻止对web.config文件的直接请求,您还可以使用IIS命令来加密web.config文件的ConnectionString部分。这种加密方式是特定于计算机的,增加了它的优势,.NET运行时也会在您访问它时动态地解密连接字符串,因此您的应用程序不需要额外的编码来处理它。

4

在Microsoft堆栈上,事情可以非常好。

您在Active Directory中创建网络用户帐户几乎没有权限。您将IIS配置为以该用户身份运行您的Web应用程序。您授予该用户读取磁盘上的Web文件夹和文件的权限。您将SQL Server配置为授予该用户对所需表的读/写权限。并且在连接字符串中,您指示db客户端以当前运行web应用程序的用户帐户连接。

尽管在多个地方可见,但只有一个实际用户帐户。此用户帐户的权限非常有限。即使加密,也无法在任何地方存储密码。没有配置必须在代码中完成才能工作(这完全在设置权限中)。

1

在Django中,凭证位于您的settings.py配置文件中。由于这通常不在您的/var/www/目录树中,因此它非常安全。

而且,单一Django应用程序可以使用(再利用)为同一主机上的许多网站或Web服务器,每个都有它自己独特的设置。因此settings.py配置不与应用程序捆绑在一起,而是应用程序的单个部署的一部分。

1

对于asp.net:

我存储的全局参数,如连接字符串,并在注册表中的版本库路径,然后在web.config中的注册表项的参考。

主要的原因是,我经常发现我必须写一个独立的可执行文件运行后台任务和需要访问相同的参数等自动化功能。因此,在一个易于到达的地方保持真正的全球化,让生活更轻松。

0

以下哪些是保持您的Web应用程序数据库凭据的好地方? 在您的源代码中的单独文件中 在您的Web服务器主机上的单独文件中 在您的数据库中 无。数据库凭证永远不会存储

+0

那么,如果服务器上没有带有凭证的文件,应用程序如何连接到数据库? – thenetimp 2017-09-20 13:36:32

相关问题