【问题标题】:Spring boot security - create root user on startupSpring Boot 安全性 - 在启动时创建 root 用户
【发布时间】:2016-11-10 00:37:10
【问题描述】:

我的 Spring Boot Web 应用使用带有 spring-boot-security 的表单身份验证。
我有两个表:
User

CREATE TABLE user
(
    id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    password CHAR(60) NOT NULL,
    //...
);

角色

CREATE TABLE role
(
    id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    r_name VARCHAR(45) NOT NULL
);
CREATE UNIQUE INDEX sys_role_r_name_uindex ON sys_role (r_name);  

加入表

CREATE TABLE ref_user_role
(
    user_id INT(11) NOT NULL,
    role_id INT(11) NOT NULL,
    // ...
);

为了添加更多具有其他角色/权限的用户,必须在 sys_role 表中具有角色ROLE_ROOT。从逻辑上讲,这个 root 用户必须在 add-more-users 操作之前存在。

我试过的是这样的

  • 在部署应用程序之前,我运行了一个包含 root-user-insertion 语句的 sql 脚本。显然,我还必须手动为这个 root 用户生成一个加密密码。
  • 我在语法上运行了一个 sql 脚本来插入根凭据。我担心在 data.sql 文件中包含我的 ROOT 用户凭据可能不安全。如果我输入密码的加密版本,我必须事先对其进行加密。

另一种方式我能想到的是,我只能在应用程序第一次启动时创建一个根创建页面。除了用户名和密码外,我还需要一个密码(只有我和应用知道),这样其他随机人都无法创建 root 帐户。

这些是常见的方法吗?
如果没有,有什么好的方法?

【问题讨论】:

  • 您可以在启动时使用生成的加密密码务实地执行删除/插入或更新/插入查询

标签: java spring spring-mvc spring-security spring-boot


【解决方案1】:

如果您使用的是 Spring Boot,您所要做的就是将 schema.sql 和 data.sql 脚本放在资源类路径中。

schema.sql 将负责创建您的表以及它们之间的关联,而 data.sql 将负责使用数据初始化您的表,因此您可以将插入语句放入表中。

当您上传服务时,Spring Boot 每次上传都会自动执行这些脚本。

如需进一步阅读,请查看:

http://docs.spring.io/spring-boot/docs/1.4.2.RELEASE/reference/htmlsingle/#howto-database-initialization

【讨论】:

  • 谢谢。我已经按照您在第一种方法中的建议做了。我担心在 data.sql 文件中包含我的 ROOT 用户凭据可能不安全。如果我输入密码的加密版本,我必须事先对其进行加密。我想知道是否有更优雅的方法。
  • 你为什么认为它不安全?此脚本无法通过您的服务访问。
  • 我一直认为将密码放入文件是一个坏主意。我了解,如果我的服务器、源代码仓库和我的工作站完全不受黑客攻击,那么将密码存储在文件中是没有害处的。
  • 对密码进行编码和加盐怎么样?
猜你喜欢
  • 2014-10-29
  • 2020-08-25
  • 2020-06-11
  • 2016-06-27
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 2018-03-09
  • 2021-07-14
相关资源
最近更新 更多