사용자 권한 조회
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 채널(&), 비밀번호 해시를 반환한다.