| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- -- =====================================================
- -- MinIO文件存储安全实施脚本
- -- 创建时间: 2025-01-27
- -- 说明: 将MinIO从public访问改为private + 预签名URL访问 + 访问密码
- -- =====================================================
- -- 1. 更新OSS配置,将访问策略改为私有
- UPDATE sys_oss_config
- SET access_policy = '0' -- 桶权限类型(0=private 1=public 2=custom)
- WHERE config_key = 'minio';
- -- 2. 创建文件权限表
- CREATE TABLE IF NOT EXISTS sys_file_permission (
- id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
- oss_id BIGINT NOT NULL COMMENT '文件ID',
- user_id BIGINT COMMENT '用户ID(为空表示角色权限)',
- role_id BIGINT COMMENT '角色ID(为空表示用户权限)',
- permission_type VARCHAR(20) NOT NULL COMMENT '权限类型:READ, WRITE, DELETE',
- create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- create_by BIGINT COMMENT '创建者',
- update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- update_by BIGINT COMMENT '更新者',
- deleted TINYINT DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
- tenant_id BIGINT DEFAULT 0 COMMENT '租户编号'
- ) COMMENT '文件权限表';
- -- 3. 创建文件访问日志表
- CREATE TABLE IF NOT EXISTS sys_file_access_log (
- id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
- oss_id BIGINT NOT NULL COMMENT '文件ID',
- user_id BIGINT NOT NULL COMMENT '访问用户ID',
- access_type VARCHAR(20) NOT NULL COMMENT '访问类型:DOWNLOAD, PREVIEW',
- access_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '访问时间',
- ip_address VARCHAR(50) COMMENT '访问IP',
- user_agent VARCHAR(500) COMMENT '用户代理',
- create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
- ) COMMENT '文件访问日志表';
- -- 4. 创建bucket访问密码表
- CREATE TABLE IF NOT EXISTS sys_bucket_access_password (
- id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
- bucket_name VARCHAR(100) NOT NULL COMMENT 'bucket名称',
- access_password VARCHAR(255) NOT NULL COMMENT '访问密码(加密存储)',
- password_salt VARCHAR(100) NOT NULL COMMENT '密码盐值',
- is_active TINYINT DEFAULT 1 COMMENT '是否启用(1启用 0禁用)',
- expire_time DATETIME COMMENT '密码过期时间',
- max_access_count INT DEFAULT 0 COMMENT '最大访问次数(0表示无限制)',
- current_access_count INT DEFAULT 0 COMMENT '当前访问次数',
- create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- create_by BIGINT COMMENT '创建者',
- update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- update_by BIGINT COMMENT '更新者',
- deleted TINYINT DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
- tenant_id BIGINT DEFAULT 0 COMMENT '租户编号',
- UNIQUE KEY uk_bucket_name (bucket_name)
- ) COMMENT 'bucket访问密码表';
- -- 5. 创建bucket访问记录表
- CREATE TABLE IF NOT EXISTS sys_bucket_access_record (
- id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
- bucket_name VARCHAR(100) NOT NULL COMMENT 'bucket名称',
- access_password_id BIGINT NOT NULL COMMENT '访问密码ID',
- access_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '访问时间',
- access_ip VARCHAR(50) COMMENT '访问IP',
- access_user_agent VARCHAR(500) COMMENT '用户代理',
- access_result TINYINT DEFAULT 1 COMMENT '访问结果(1成功 0失败)',
- fail_reason VARCHAR(500) COMMENT '失败原因',
- create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
- ) COMMENT 'bucket访问记录表';
- -- 6. 创建索引
- CREATE INDEX idx_file_permission_oss_id ON sys_file_permission(oss_id);
- CREATE INDEX idx_file_permission_user_id ON sys_file_permission(user_id);
- CREATE INDEX idx_file_permission_role_id ON sys_file_permission(role_id);
- CREATE INDEX idx_file_access_log_oss_id ON sys_file_access_log(oss_id);
- CREATE INDEX idx_file_access_log_user_id ON sys_file_access_log(user_id);
- CREATE INDEX idx_file_access_log_access_time ON sys_file_access_log(access_time);
- CREATE INDEX idx_bucket_access_password_bucket_name ON sys_bucket_access_password(bucket_name);
- CREATE INDEX idx_bucket_access_record_bucket_name ON sys_bucket_access_record(bucket_name);
- CREATE INDEX idx_bucket_access_record_access_time ON sys_bucket_access_record(access_time);
- -- 7. 插入默认bucket访问密码(示例:ruoyi bucket)
- INSERT INTO sys_bucket_access_password (bucket_name, access_password, password_salt, is_active, max_access_count, create_by, tenant_id) VALUES
- ('ruoyi', 'e10adc3949ba59abbe56e057f20f883e', 'ruoyi_salt_2025', 1, 0, 1, 0);
- -- 8. 插入默认权限数据(可选)
- -- 为现有文件添加默认权限,允许所有登录用户读取
- INSERT INTO sys_file_permission (oss_id, permission_type, create_by, tenant_id)
- SELECT
- oss_id,
- 'READ',
- 1,
- 0
- FROM sys_oss
- -- WHERE deleted = 0;
- -- 9. 验证更新结果
- SELECT
- config_key,
- access_policy,
- bucket_name,
- endpoint
- FROM sys_oss_config
- WHERE config_key = 'minio';
- -- 10. 显示表结构
- DESCRIBE sys_file_permission;
- DESCRIBE sys_file_access_log;
- DESCRIBE sys_bucket_access_password;
- DESCRIBE sys_bucket_access_record;
|