DBAtlas · 数据库运维图谱

显示用户的权限

Oracle

SELECT privilege FROM dba_sys_privs WHERE grantee = 'APP'
UNION ALL SELECT granted_role FROM dba_role_privs WHERE grantee = 'APP'
UNION ALL SELECT privilege||' ON '||owner||'.'||table_name
          FROM dba_tab_privs WHERE grantee = 'APP';

grantee 以大写形式存储。对于通过角色间接授予的权限,还需遍历 role_role_privs。

PostgreSQL

SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.role_table_grants
WHERE grantee = 'app';
-- Role memberships (direct): \drg app (PG16+; earlier \du app)

角色成员关系(继承)存储在 pg_auth_members 中;\du/\drg 只显示直接成员关系,间接成员关系使用 pg_has_role('app', '<role>', 'MEMBER')。

MySQL

SHOW GRANTS FOR 'app'@'%';

对于角色(MySQL 8),先执行 SET ROLE ALL,或使用 SHOW GRANTS FOR 'app'@'%' USING 'role_name';

SQL Server

SELECT dp.name AS principal, p.permission_name,
       p.state_desc, o.name AS object
FROM sys.database_permissions p
JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
LEFT JOIN sys.objects o ON p.major_id = o.object_id
WHERE dp.name = 'app';

对于通过角色授予的权限,还需检查 sys.database_role_members 中的成员关系。

MongoDB

db.getUser("app", { showPrivileges: true, showCredentials: false })

showPrivileges 还会列出角色展开后的(有效)权限。

Redis

ACL GETUSER app

返回允许的命令、键模式(~)、pub/sub 频道(&)和密码哈希。

在 DBAtlas 中打开 →