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에서 열기 →