初始设置

默认帐号

系统已在 db/esql.dat(SQLite)中建好了表结构和root帐号(安全起见,安装后请修改root密码)

帐号 密码 角色
root toor 超级管理员

系统配置

conf/esql.yml 中权限相关配置:

acl: {
    # 是否开启认证, false: 免认证
    need_auth: true,
    # 是否允许 root 帐号在远程主机(非本机)访问 ESql
    root_allow_remote: true,
    ...
}

database: {
    dbms: lite,   # 默认使用的是内置的sqlite数据库,也可配置为其它关系型数据库(如MySQL、PostgreSQL)
    database: db/esql.dat
}

feature: {
    # 删除记录方式        disable: 不支持删除记录    single(默认): 支持删除记录(只能单条)    batch: 支持根据 WHERE 条件批量删除
    record_delete_mode: batch,
    ...
}

api: {
    # Session 加密密钥, 涉及系统安全, 部署时请务必更改
    secret_key: 'jmN]LyX HHWR8j/3R7dZrTB0~X!8j !!! please change it !!! jmN]LyX HHWR8j/3R7dZrTB0~X!8j',
    # Session(用户登录后的)过期时间, 单位分钟
    session_lifetime: 300,
    ...
}
  • need_auth 设为 false 时,则系统无需设置用户和权限(无需帐号密码即可操作ESql的所以功能)
  • record_delete_mode 设为 disable 时,ESql将不允许用户删除数据(不管用户是否有删除数据的权限)

SQL参考

系统默认的权限数据库(SQLite)使用粗粒度锁。写操作时,会有几毫秒的整库锁定时间。 如果用户、权限的更新频率很高, 可以配置成 PostgreSQL 或 MySQL 数据库,建表语句可参考(SQLite版本):

DROP TABLE acl;
DROP TABLE "user";

-- 用户表
CREATE TABLE "user" (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username character varying(64) NOT NULL,
    password character varying(80) NOT NULL,
    CONSTRAINT user_unique UNIQUE (username)
);
CREATE INDEX user_username_index ON "user" (username);

-- 访问控制表
CREATE TABLE acl (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    host character varying(64) NOT NULL,        -- 授权访问的主机地址
    grantee integer NOT NULL,                   -- 被授权用户
    privilege character varying(64) NOT NULL,   -- 授权名  e.g.  SELECT, DROP, ...
    grant_able boolean DEFAULT 0 NOT NULL,      -- 再授权权限
    object character varying(64) NOT NULL,      -- 授权对象  e.g.  index_1.doc_type_1, index...
    attach character varying(128),              -- 附加限制  e.g.  redkeys | redkeys,...(复数时用逗号分隔)
    CONSTRAINT acl_unique UNIQUE (host, grantee, privilege, object),
    CONSTRAINT acl_grantee_foreign_key FOREIGN KEY (grantee) REFERENCES "user" (id)
);

CREATE INDEX acl_privilege_index ON acl(privilege);
CREATE INDEX acl_grantee_index ON acl(grantee);
CREATE INDEX acl_grant_able_index ON acl(grant_able);

-- root user
DELETE FROM "user";
INSERT INTO "user"(username, password) VALUES ('root', '7e589229a6f7d9e94906481d4f243c29d65b2fe5d6919cf3f1ddff08db0a53fce10304ad0194fa4a');
DELETE FROM acl;
INSERT INTO acl(host, grantee, privilege, grant_able, object) VALUES ('%', 1, 'all', 1, '*.*');             -- all privilege with grant_able