PostgreSQL 新建只读查询用户(Read-Only User)

基础脚本 -- 创建用户 CREATE USER readonly WITH PASSWORD 'TJJe5CvU'; -- 授予连接数据库权限 GRANT CONNECT ON DATABASE jgsteel_prm TO readonly; -- 授予 schema 使用权限 GRANT USAGE ON SCHEMA public TO readonly; -- 授予现有表查询权限 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -- 设置默认权限:未来新建的表也自动授予 SELECT ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; 这个脚本能跑通,但有几个可以改进的地方。 生产环境强化版 -- ============================================ -- Create Read-Only User for PostgreSQL -- ============================================ -- Step 1: Create login role (idempotent) DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'readonly') THEN CREATE ROLE readonly WITH LOGIN PASSWORD 'TJJe5CvU'; RAISE NOTICE 'Role [readonly] created.'; ELSE RAISE NOTICE 'Role [readonly] already exists.'; END IF; END $$; -- Step 2: Grant CONNECT on target database GRANT CONNECT ON DATABASE jgsteel_prm TO readonly; -- Step 3: Switch to target database (run these inside the database) -- \c jgsteel_prm -- Step 4: Grant schema usage GRANT USAGE ON SCHEMA public TO readonly; -- Step 5: Grant SELECT on ALL existing tables GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -- Step 6: Set default privileges for future tables ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; -- Step 7: (Optional) Grant SELECT on sequences if needed GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO readonly; -- Step 8: (Optional) Revoke write permissions explicitly REVOKE INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM readonly; 关键点解读 1. ALTER DEFAULT PRIVILEGES — 最容易遗漏的一步 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; 这条命令只对执行时已存在的表生效。未来新建的表不会自动获得权限。 ...

2026年6月15日 · 3 分钟 · 488 字 · 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

Windows 如何实现重启后 C 盘自动还原(UWF 统一写入筛选器)

适用场景 🏫 学校机房 / 培训教室 — 学生每次登录都是干净环境 🏪 公共查询终端 / 自助机 — 防止用户随意修改系统 🧪 测试环境 — 每次重启自动还原,无需手动恢复快照 🏢 企业前台 / 展示机 — 保证系统长期稳定运行 前置条件 要求 说明 系统版本 Windows 10/11 专业版、企业版或教育版(家庭版不支持) 管理员权限 所有操作需在管理员模式下执行 数据备份 ⚠️ 启用前请备份 C 盘重要数据 操作步骤 1. 启用 UWF 功能 打开 控制面板 → 程序和功能 → 启用或关闭 Windows 功能,向下滚动找到 “设备锁定”,勾选并确认启用。 或者用 PowerShell 一键安装: # 管理员 PowerShell Enable-WindowsOptionalFeature -Online -FeatureName "Client-UnifiedWriteFilter" 安装完成后需要重启。 2. 启用 UWF 筛选器 以管理员身份打开 CMD,执行: :: 开启 UWF 筛选器 uwfmgr filter enable :: 仅保护 C 盘 uwfmgr volume protect c: 3. 重启生效 shutdown /r /t 0 重启后,C 盘的"重启还原"正式生效 — 所有对 C 盘的更改(新建文件、修改配置、安装软件)在重启后都会消失。 ...

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