Java 对varrying数据库的应用程序访问

Java 对varrying数据库的应用程序访问,java,mysql,database,Java,Mysql,Database,我正在做一个项目,想知道以下场景的最佳实践是什么 我正在开发一个需要用户访问控制的应用程序。当用户启动应用程序时,将提示他们输入用户名和密码。该应用程序的设计使得用户可以连接到不同的数据库,这取决于他们来自哪个学校。因此,每所学校将有一个不同的数据库地址。那么,我是否也会在登录提示时向用户询问数据库url 另外,我如何重新严格访问数据库,只允许该应用程序访问数据库?例如,您不能启动不同的应用程序并尝试使用相同的用户名和密码连接到该数据库,因为它不是正确的应用程序 谢谢,如果你需要我进一步解释,请

我正在做一个项目,想知道以下场景的最佳实践是什么

我正在开发一个需要用户访问控制的应用程序。当用户启动应用程序时,将提示他们输入用户名和密码。该应用程序的设计使得用户可以连接到不同的数据库,这取决于他们来自哪个学校。因此,每所学校将有一个不同的数据库地址。那么,我是否也会在登录提示时向用户询问数据库url

另外,我如何重新严格访问数据库,只允许该应用程序访问数据库?例如,您不能启动不同的应用程序并尝试使用相同的用户名和密码连接到该数据库,因为它不是正确的应用程序

谢谢,如果你需要我进一步解释,请告诉我

更多详情:


学校名单不会在汇编时确定。学校将选择使用该应用程序,然后为使用该软件建立一个数据库,然后学生将使用该应用程序。因此,不会有学校的初步名单。你对解决那个问题有什么建议


每个学校主机都有自己的服务器。

您不需要要求用户选择或输入其相应的数据库地址,而可以使用他们将用于身份验证的密码,让用户在相应的学校数据库上使用相同的密码,并具有有限的权限(例如,更新、插入等。仅不提供删除或删除)。因此,根据选择的学校,将选择相应的数据库url(硬编码或从配置文件加载),输入的密码将用于连接,如果其正确,则将成功连接到数据库


尽管这并不能解决其他应用程序使用相同凭据访问数据库的第二个问题。如果我仔细考虑,它将更新答案。

没有必要为每所学校创建不同的数据库,甚至不需要为这一问题创建不同的表

你可以使用像这样的桌子

school  -- all schools with data belonging to that school.
------------
id integer primary key auto_increment
name varchar(255)
unique index idx_school (name)

user -- all users from all schools in one table.
--------
id integer primary key auto_increment
username varchar(255)
passhash varchar(200)  -- hashed and salted password
salt varchar(10)       -- salt used, not encrypted, but different per user.
school_id integer not null foreign key references school(id)
unique index idx_user (username, school_id)
使用以下命令选择用户:

SELECT u.id FROM user u
INNER JOIN school s ON (s.id = u.school_id)
WHERE s.name = :schoolname
  AND u.name = :username
  AND u.passhash = SHA2(CONCAT(salt,:password),512) 

:…
是你的参数。

你确定你想要一个完全不同的数据库而不是每个学校的一个不同的表吗?这对我来说似乎有点笨拙,但你可能有你的理由。学校列表不会在编译时设置。学校会选择使用该应用程序,然后为美国建立一个数据库然后他们的学生将使用该应用程序。因此,不会有一个学校的初始列表。您对解决该问题有何建议?您可以根据需要添加学校,这就是为什么会有一个学校列表。非常简单,非常灵活,比每次添加新数据库容易得多,而且更安全好的。是的,但每个学校都必须拥有自己的服务器。这样,他们的信息对他们来说是私有的,只有他们自己。我会在帖子中补充这一点,可能还不清楚。我想我要做的是,让一个属性文件与应用程序关联。然后学校管理员会更改属性文件中的默认DB值e到DB地址,然后每个用户都会从他们学校的网站下载该应用程序。他们下载的应用程序将具有该属性文件,并且该属性文件将特定于他们的学校。这听起来如何?