Java Spring启动安全性-启动时创建根用户

Java Spring启动安全性-启动时创建根用户,java,spring,spring-mvc,spring-security,spring-boot,Java,Spring,Spring Mvc,Spring Security,Spring Boot,我的Spring Boot web应用程序使用具有Spring Boot安全性的表单身份验证。 我有两张桌子: 用户 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)

我的Spring Boot web应用程序使用具有Spring Boot安全性的表单身份验证。
我有两张桌子:
用户

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,
    // ...
);
联接表

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\u role表中使用角色
role\u ROOT
。逻辑上,此根用户必须在“添加更多用户”操作之前存在

我试过的是

  • 在部署应用程序之前,我运行了一个包含根用户插入语句的sql脚本。显然,我还必须手动为这个根用户生成加密密码
  • 我按语法运行sql脚本以插入根凭据。我担心在data.sql文件中包含我的根用户凭据可能不安全。如果我输入密码的加密版本,我必须事先加密它
我能想到的另一种方法是,我只能在应用程序第一次启动时创建根目录创建页面。除了用户名和密码之外,我还需要一个密码(只有我和应用程序知道),这样其他随机人就无法创建根帐户

这些是常见的方法吗?

如果没有,有哪些好方法?

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

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

当您上传服务时,这些脚本将在每次上传时由Spring Boot自动执行

进一步阅读请参阅:


您可以使用生成的加密密码在StartupThank实用地执行删除/插入或更新/插入查询。我已经按照你在我的第一种方法中的建议做了。我担心在data.sql文件中包含我的根用户凭据可能不安全。如果我输入密码的加密版本,我必须事先加密它。我想知道是否有更优雅的方法。你为什么认为这样做不安全?此脚本无法通过您的服务访问。我始终认为将密码放在文件中是个坏主意。我知道,如果我的服务器、源代码repo和工作站完全安全,不受黑客攻击,那么将密码存储在文件中不会有任何危害。那么对密码进行编码和加密呢?