MaxDB新用户无法通过角色访问表问题排查求助
这问题我之前帮团队排查过类似的,结合MaxDB的权限机制来看,大概率是以下几个点出了问题,你可以逐一验证:
角色未被激活:MaxDB里除了默认的
PUBLIC角色,自定义角色需要用户主动激活才能生效。你可以让这个用户登录后执行:SET ROLE <你的角色名>;执行完再尝试查看表,如果能访问了,说明就是激活的问题。要是想让这个角色下次登录自动生效,可以跑这条语句把它设为用户的默认角色:
ALTER USER <用户名> DEFAULT ROLE <角色名>;存在否定权限覆盖:MaxDB的权限规则里,直接赋予用户的否定权限(比如
NO SELECT)会优先于角色的肯定权限。哪怕角色给了全表访问,只要用户自己的tableprivileges里有对应表的否定项,就会被限制。你可以用这条SQL查一下:SELECT * FROM tableprivileges WHERE grantee = '<用户名>';如果发现有
NO开头的权限,删掉之后再测试。角色权限的对象范围不匹配:检查一下角色在
roleprivileges里的权限是不是覆盖了所有需要的表。比如如果角色的权限是ON SCHEMA <特定schema> ALL TABLES,但用户访问的表在其他schema下,或者用户登录后的默认schema不是这个,就会看不到表。可以让用户尝试用SELECT * FROM <schema名>.<表名>指定schema访问,或者确认角色的权限定义是否包含了所有目标schema。会话权限未刷新:如果是你刚给用户分配完角色,用户还没重新登录的话,旧会话里的权限还是没更新的。MaxDB的权限变更需要用户重新建立会话才会生效,让用户退出再重新登录试试。
如果以上都没问题,你可以再对比这个用户和其他正常用户的角色分配细节,比如有没有其他角色的冲突,或者用户的属性设置差异(比如是否有RESTRICTED之类的限制)。
内容的提问来源于stack exchange,提问作者David Horno

