GitLab 将公有项目改为私有项目失败解决方法

问题现象 在 GitLab 中将一个**公有(Public)项目改为私有(Private)**时,点击保存后失败,页面无明确错误提示。 查找日志 方法一:查看 production.log # 查看 GitLab Rails 生产日志 tail -f /var/log/gitlab/gitlab-rails/production.log 在执行"改为私有"操作的同时观察日志,会发现关键报错: OpenSSL::Cipher::CipherError () 方法二:使用 gitlab-ctl tail(官方推荐) gitlab-ctl tail gitlab-rails 原因 GitLab 在修改项目可见性时,会尝试对某些敏感字段(如 runner token)进行加密/解密操作。如果加密密钥或 token 数据异常,就会抛出 OpenSSL::Cipher::CipherError。 解决方法 进入 GitLab 数据库控制台 gitlab-rails dbconsole 清空 runner token 相关字段 -- 清空项目的 runner token UPDATE projects SET runners_token = null, runners_token_encrypted = null; -- 清空命名空间的 runner token UPDATE namespaces SET runners_token = null, runners_token_encrypted = null; -- 清空应用设置的注册 token UPDATE application_settings SET runners_registration_token_encrypted = null; -- 清空 CI runner 的 token UPDATE ci_runners SET token = null, token_encrypted = null; 执行后输出示例: ...

2026年6月15日 · 1 分钟 · 196 字 · AIHugoBlog

Kubernetes:如何解决 k8s.gcr.io 拉取镜像失败问题

问题背景 由于网络限制,k8s.gcr.io 和 registry.k8s.io 在国内无法直接访问。在部署 Kubernetes 组件或安装 CSI、CNI 等插件时,经常会遇到: Error response from daemon: manifest for k8s.gcr.io/xxx not found: manifest unknown # 或 Failed to pull image "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2" 方案一:域名替换(最简单,手动拉取时用) 将 k8s.gcr.io 或 registry.k8s.io 替换为国内可用的镜像站: 原始地址 替换为 k8s.gcr.io/xxx registry.lank8s.cn/xxx registry.k8s.io/xxx registry.lank8s.cn/xxx k8s.gcr.io/xxx m.daocloud.io/xxx registry.k8s.io/xxx m.daocloud.io/xxx 示例:NFS Subdir External Provisioner # 原始命令(会失败) docker pull registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 # 替换为 lank8s.cn 镜像 docker pull registry.lank8s.cn/sig-storage/nfs-subdir-external-provisioner:v4.0.2 # 或使用 DaoCloud 镜像 docker pull m.daocloud.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 # 拉取后重新打标签 docker tag registry.lank8s.cn/sig-storage/nfs-subdir-external-provisioner:v4.0.2 \ registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 常用镜像站对比 镜像站 同步速度 稳定性 备注 registry.lank8s.cn ⚡ 快 ✅ 稳定 个人维护,长期可用 m.daocloud.io ⚡ 快 ✅ 稳定 DaoCloud 官方维护 gcr.mirrors.ustc.edu.cn 🐢 较慢 ⚠️ 有时断 中科大源 registry.aliyuncs.com/google_containers ⚡ 快 ✅ 稳定 阿里云,需拼接路径 方案二:配置 Docker / containerd 镜像加速(推荐,一劳永逸) Docker Engine 配置 编辑 /etc/docker/daemon.json: ...

2026年6月15日 · 2 分钟 · 320 字 · AIHugoBlog

SQL Server 新建只读查询用户(Read-Only Query User)

基础脚本 创建一个只能执行 SELECT 查询的只读用户,标准做法如下: CREATE LOGIN onlyque WITH PASSWORD = '123456'; USE test; GO CREATE USER onlyque FOR LOGIN onlyque; USE test; GO GRANT SELECT ON SCHEMA::dbo TO onlyque; 这个脚本能跑通,但在生产环境下存在几个风险。 生产环境强化版 -- ============================================ -- Create Read-Only Query User for test database -- ============================================ -- Step 1: Create login at server level (with strong password) IF NOT EXISTS (SELECT 1 FROM sys.sql_logins WHERE name = 'onlyque') BEGIN CREATE LOGIN onlyque WITH PASSWORD = 'YourStr0ngP@ss2026' , DEFAULT_DATABASE = test , CHECK_POLICY = ON , CHECK_EXPIRATION = ON; PRINT 'Login [onlyque] created.'; END ELSE PRINT 'Login [onlyque] already exists.'; GO -- Step 2: Create database user USE test; GO IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = 'onlyque') BEGIN CREATE USER onlyque FOR LOGIN onlyque WITH DEFAULT_SCHEMA = dbo; PRINT 'User [onlyque] created in [test].'; END ELSE PRINT 'User [onlyque] already exists in [test].'; GO -- Step 3: Grant read-only permissions GRANT SELECT ON SCHEMA::dbo TO onlyque; -- Step 4: Explicitly deny write operations (defense in depth) DENY INSERT, UPDATE, DELETE ON SCHEMA::dbo TO onlyque; GO -- Step 5: Verify permissions SELECT dp.name AS principal_name, dp.type_desc, perm.permission_name, perm.state_desc, OBJECT_SCHEMA_NAME(perm.major_id) AS schema_name FROM sys.database_principals dp JOIN sys.database_permissions perm ON dp.principal_id = perm.grantee_principal_id WHERE dp.name = 'onlyque'; GO 关键改进点 1. 密码策略 — 拒绝弱口令 CHECK_POLICY = ON 强制使用 Windows 密码复杂度策略(大写 + 小写 + 数字 + 特殊字符,最少 8 位)。生产环境永远不要用 123456。 ...

2026年6月15日 · 2 分钟 · 330 字 · AIHugoBlog