minio-security-implementation.sql 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. -- =====================================================
  2. -- MinIO文件存储安全实施脚本
  3. -- 创建时间: 2025-01-27
  4. -- 说明: 将MinIO从public访问改为private + 预签名URL访问 + 访问密码
  5. -- =====================================================
  6. -- 1. 更新OSS配置,将访问策略改为私有
  7. UPDATE sys_oss_config
  8. SET access_policy = '0' -- 桶权限类型(0=private 1=public 2=custom)
  9. WHERE config_key = 'minio';
  10. -- 2. 创建文件权限表
  11. CREATE TABLE IF NOT EXISTS sys_file_permission (
  12. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  13. oss_id BIGINT NOT NULL COMMENT '文件ID',
  14. user_id BIGINT COMMENT '用户ID(为空表示角色权限)',
  15. role_id BIGINT COMMENT '角色ID(为空表示用户权限)',
  16. permission_type VARCHAR(20) NOT NULL COMMENT '权限类型:READ, WRITE, DELETE',
  17. create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  18. create_by BIGINT COMMENT '创建者',
  19. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  20. update_by BIGINT COMMENT '更新者',
  21. deleted TINYINT DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
  22. tenant_id BIGINT DEFAULT 0 COMMENT '租户编号'
  23. ) COMMENT '文件权限表';
  24. -- 3. 创建文件访问日志表
  25. CREATE TABLE IF NOT EXISTS sys_file_access_log (
  26. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  27. oss_id BIGINT NOT NULL COMMENT '文件ID',
  28. user_id BIGINT NOT NULL COMMENT '访问用户ID',
  29. access_type VARCHAR(20) NOT NULL COMMENT '访问类型:DOWNLOAD, PREVIEW',
  30. access_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '访问时间',
  31. ip_address VARCHAR(50) COMMENT '访问IP',
  32. user_agent VARCHAR(500) COMMENT '用户代理',
  33. create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  34. ) COMMENT '文件访问日志表';
  35. -- 4. 创建bucket访问密码表
  36. CREATE TABLE IF NOT EXISTS sys_bucket_access_password (
  37. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  38. bucket_name VARCHAR(100) NOT NULL COMMENT 'bucket名称',
  39. access_password VARCHAR(255) NOT NULL COMMENT '访问密码(加密存储)',
  40. password_salt VARCHAR(100) NOT NULL COMMENT '密码盐值',
  41. is_active TINYINT DEFAULT 1 COMMENT '是否启用(1启用 0禁用)',
  42. expire_time DATETIME COMMENT '密码过期时间',
  43. max_access_count INT DEFAULT 0 COMMENT '最大访问次数(0表示无限制)',
  44. current_access_count INT DEFAULT 0 COMMENT '当前访问次数',
  45. create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  46. create_by BIGINT COMMENT '创建者',
  47. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  48. update_by BIGINT COMMENT '更新者',
  49. deleted TINYINT DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
  50. tenant_id BIGINT DEFAULT 0 COMMENT '租户编号',
  51. UNIQUE KEY uk_bucket_name (bucket_name)
  52. ) COMMENT 'bucket访问密码表';
  53. -- 5. 创建bucket访问记录表
  54. CREATE TABLE IF NOT EXISTS sys_bucket_access_record (
  55. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  56. bucket_name VARCHAR(100) NOT NULL COMMENT 'bucket名称',
  57. access_password_id BIGINT NOT NULL COMMENT '访问密码ID',
  58. access_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '访问时间',
  59. access_ip VARCHAR(50) COMMENT '访问IP',
  60. access_user_agent VARCHAR(500) COMMENT '用户代理',
  61. access_result TINYINT DEFAULT 1 COMMENT '访问结果(1成功 0失败)',
  62. fail_reason VARCHAR(500) COMMENT '失败原因',
  63. create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  64. ) COMMENT 'bucket访问记录表';
  65. -- 6. 创建索引
  66. CREATE INDEX idx_file_permission_oss_id ON sys_file_permission(oss_id);
  67. CREATE INDEX idx_file_permission_user_id ON sys_file_permission(user_id);
  68. CREATE INDEX idx_file_permission_role_id ON sys_file_permission(role_id);
  69. CREATE INDEX idx_file_access_log_oss_id ON sys_file_access_log(oss_id);
  70. CREATE INDEX idx_file_access_log_user_id ON sys_file_access_log(user_id);
  71. CREATE INDEX idx_file_access_log_access_time ON sys_file_access_log(access_time);
  72. CREATE INDEX idx_bucket_access_password_bucket_name ON sys_bucket_access_password(bucket_name);
  73. CREATE INDEX idx_bucket_access_record_bucket_name ON sys_bucket_access_record(bucket_name);
  74. CREATE INDEX idx_bucket_access_record_access_time ON sys_bucket_access_record(access_time);
  75. -- 7. 插入默认bucket访问密码(示例:ruoyi bucket)
  76. INSERT INTO sys_bucket_access_password (bucket_name, access_password, password_salt, is_active, max_access_count, create_by, tenant_id) VALUES
  77. ('ruoyi', 'e10adc3949ba59abbe56e057f20f883e', 'ruoyi_salt_2025', 1, 0, 1, 0);
  78. -- 8. 插入默认权限数据(可选)
  79. -- 为现有文件添加默认权限,允许所有登录用户读取
  80. INSERT INTO sys_file_permission (oss_id, permission_type, create_by, tenant_id)
  81. SELECT
  82. oss_id,
  83. 'READ',
  84. 1,
  85. 0
  86. FROM sys_oss
  87. -- WHERE deleted = 0;
  88. -- 9. 验证更新结果
  89. SELECT
  90. config_key,
  91. access_policy,
  92. bucket_name,
  93. endpoint
  94. FROM sys_oss_config
  95. WHERE config_key = 'minio';
  96. -- 10. 显示表结构
  97. DESCRIBE sys_file_permission;
  98. DESCRIBE sys_file_access_log;
  99. DESCRIBE sys_bucket_access_password;
  100. DESCRIBE sys_bucket_access_record;