权限体系概述
KingbaseES 采用与 PostgreSQL 兼容的角色权限模型。"角色"(Role)同时兼具用户和组的功能——具有 LOGIN 属性的角色即为用户,可用于组织角色即为组角色。
用户创建与基本权限
-- 创建普通应用用户(具有登录权限) CREATE USER app_user WITH PASSWORD 'Str0ng@Pass!' NOSUPERUSER NOCREATEDB NOCREATEROLE; -- 创建只读用户 CREATE ROLE readonly_role; GRANT CONNECT ON DATABASE mydb TO readonly_role; GRANT USAGE ON SCHEMA public TO readonly_role; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role; -- 将角色赋予用户 GRANT readonly_role TO app_user;
行级安全策略(RLS)
对于多租户场景,可启用行级安全策略,确保用户只能访问属于自己的数据行。
-- 启用行级安全 ALTER TABLE orders ENABLE ROW LEVEL SECURITY; -- 创建策略:用户只能看到自己的订单 CREATE POLICY orders_isolation_policy ON orders USING (tenant_id = current_setting('app.current_tenant')::integer); -- 应用代码中设置当前租户 SET app.current_tenant = '42';
权限审计查询
-- 查询某用户拥有的所有角色 SELECT rolname FROM sys_roles WHERE sys_has_role('app_user', rolname, 'member'); -- 查询某表的权限分配情况 SELECT grantee, privilege_type, is_grantable FROM information_schema.role_table_grants WHERE table_name = 'orders'; -- 查询 SUPERUSER 列表(高风险账号) SELECT rolname, rolsuper, rolcreatedb, rolcreaterole FROM sys_roles WHERE rolsuper = true;
生产环境应禁止应用程序直连 SYSTEM(超级用户)账号。超级用户不受任何权限限制,一旦凭证泄露将造成严重数据安全事故。
密码策略配置
# 在 kingbase.conf 中启用密码复杂度插件 shared_preload_libraries = 'passwordcheck' passwordcheck.minimum_length = 10 passwordcheck.special_chars = '!@#$%^&*()'