如何在PostgreSQL中实现与SQL Server等效的CREATE DATABASE权限检查
PostgreSQL校验CREATE DATABASE权限实现方案
PostgreSQL没有内置与SQL Server HAS_PERMS_BY_NAME 完全等效的函数,你可以通过以下两种方式实现需求:
- 直接查询系统目录校验
校验当前用户权限的查询语句如下:
返回值为SELECT rolcreatedb OR rolsuper AS has_create_database_perm FROM pg_roles WHERE rolname = current_user;t即有权限,f即无权限。如果要校验指定角色,将current_user替换为对应角色名的字符串即可。 - 封装自定义函数复用
可以封装一个类似HAS_PERMS_BY_NAME的自定义函数,方便后续直接调用:
调用方式和SQL Server原用法完全一致:CREATE OR REPLACE FUNCTION has_perms_by_name(role_name text DEFAULT NULL, obj_type text DEFAULT NULL, perm text DEFAULT NULL) RETURNS boolean LANGUAGE plpgsql AS $function$ BEGIN IF obj_type = 'DATABASE' AND perm = 'CREATE DATABASE' THEN role_name := COALESCE(NULLIF(role_name, ''), current_user); RETURN EXISTS ( SELECT 1 FROM pg_roles WHERE rolname = role_name AND (rolcreatedb OR rolsuper) ); END IF; RAISE EXCEPTION '暂不支持该类型权限校验,可按需扩展函数逻辑'; END; $function$;SELECT has_perms_by_name(NULL, 'DATABASE', 'CREATE DATABASE');
内容的提问来源于stack exchange,提问作者Mykyta Halchenko
相关产品推荐
相关产品推荐

