15151: Cannot find the object/principal because it does not exist or you do not have permission (객체/보안 주체가 존재하지 않거나 권한이 없어 찾을 수 없음)
SQL Server의미
참조한 객체나 보안 주체(사용자, 역할, 로그인)가 존재하지 않거나, 이에 접근/작업할 권한이 없다. 보안상 SQL Server는 두 경우를 하나의 메시지로 통합한다.
원인
GRANT/ALTER/DROP 같은 명령에서 존재하지 않는 사용자, 역할, 스키마 또는 객체 이름을 사용했거나, 잘못된 데이터베이스 컨텍스트에서 실행했거나(객체가 다른 DB에 있음), 작업에 필요한 권한이 없는 경우다. 오타, 대소문자, 스키마 접두사가 흔한 원인이다.
해결 방법
객체/보안 주체 이름의 철자가 정확한지, 올바른 데이터베이스에 있는지 확인한다. 사용자: SELECT name, type_desc FROM sys.database_principals; 객체는 sys.objects를 조회한다. 실행 계정에 필요한 권한(예: ALTER ANY USER, CONTROL)이 있는지 확인한다. 올바른 스키마 접두사(dbo.object 등)를 사용한다.
같은 데이터베이스의 다른 항목
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement (객체가 DDL로 변경되어 스냅샷 격리 트랜잭션 실패)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (FOREIGN KEY 제약 조건이 순환 또는 다중 cascade 경로를 만들 수 있음)
- 9421XML parsing: illegal xml character
- 4834You do not have permission to use the bulk load statement (bulk load 문을 사용할 권한 없음)
- 10928Resource limit for the database has been reached (Azure SQL) (데이터베이스 리소스 한도 도달)
- 40544The database has reached its size quota (Azure SQL) (데이터베이스 크기 할당량 도달)
- 40613Database is not currently available (Azure SQL) (데이터베이스를 현재 사용할 수 없음)