SQL Server 보안 주체 "dbo"가 없습니다.
다음과 같은 오류가 발생합니다
Cannot execute as the database principal because the principal "dbo"
does not exist, this type of principal cannot be impersonated,
or you do not have permission.
에 대해 읽었 ALTER AUTHORIZATION
지만이 데이터베이스에서 어떤 데이터베이스가 발생하고 있는지 전혀 알지 못합니다.이 오류는 매우 자주 발생하며 매일 약 1GB 씩 오류 로그를 증가시킵니다.
데이터베이스 소유자를 설정하여이 문제를 해결했습니다. 이 문제 전에 내 데이터베이스에 소유자가 없었습니다. 소유자를 sysadmin 계정으로 설정하려면 데이터베이스에서이 명령을 실행하십시오.
use [YourDatabaseName] EXEC sp_changedbowner 'sa'
그래픽으로하십시오.
데이터베이스 오른쪽 클릭-> 속성-> 파일-> 데이터베이스 소유자 선택-> [sa] 선택-확인
USE [<dbname>]
GO
sp_changedbowner '<user>' -- you can use 'sa' as a quick fix in databases with SQL authentication
KB913423-SQL Server 2005에서 데이터베이스를 복원 한 후 EXECUTE AS 절이 포함 된 문이나 모듈을 실행할 수 없습니다.
데이터베이스가 다른 SQL Server 또는 인스턴스에서 복원 된 경우에도 발생할 수 있습니다. 이 경우 데이터베이스의 보안 주체 'dbo'는 db가 복원 된 SQL Server의 보안 주체와 동일하지 않습니다. 내가 어떻게 이것을 알고 있는지 묻지 마라.
그것을하는 또 다른 방법
ALTER AUTHORIZATION
ON DATABASE::[DatabaseName]
TO [A Suitable Login];
엄선 된 답변과 일부는 모두 좋습니다. 더 순수한 설명을 원합니다. (유효한) 데이터베이스 소유자가없는 것과 동일한 솔루션이 제공됩니다.
dbo
오류로 언급 된 데이터베이스 소유자 계정 은 항상 데이터베이스로 작성됩니다. 존재하지 않는 것이 이상해 보이지만 두 가지 선택 (또는 하나를 선택하지만 간단하게 유지)으로 확인할 수 있습니다.
SELECT [name],[sid]
FROM [DB_NAME].[sys].[database_principals]
WHERE [name] = 'dbo'
dbo
DB_NAME 데이터베이스에서 사용자의 SID를 보여줍니다.
SELECT [name],[sid]
FROM [sys].[syslogins]
to show all logins (and their SIDs) for this SQL server instance. Notice it didn't write any db_name prefix, that's because every database has same information in that view.
So in case of error above there will not be login with SID that is assigned to database dbo user.
As explained above that usually happens when restoring database from another computer (where database and dbo user were created by different login). And you can fix it by changing ownership to existing login.
If the above does not work then try the following. It solved the problem for me even when the owner was well defined for the database.
SQL Server 2008 replication failing with: process could not execute 'sp_replcmds'
보안에서 프린시 펄을 "로그인없는 SQL 사용자"로 추가하고 프린시 펄과 동일한 이름의 스키마를 소유 한 다음 멤버십에서 db_owner로 설정하십시오.
또한 HA 설정의 기본 데이터베이스가 아닌 데이터베이스 연결 문자열을 읽기 전용 미러에 실수로 공급 한 경우에도이 오류가 발생했습니다.
참고 URL : https://stackoverflow.com/questions/13823354/sql-server-principal-dbo-does-not-exist
'Programing' 카테고리의 다른 글
반복되는 문자로 채워진 가변 길이의 문자열을 만듭니다. (0) | 2020.06.13 |
---|---|
matplotlib에서 서브 플롯에 대해 xlim 및 ylim을 설정하는 방법 (0) | 2020.06.12 |
Java에서 두 필드를 기준으로 정렬하는 방법은 무엇입니까? (0) | 2020.06.12 |
문자열에서 모든 선행 0을 제거하는 방법 (0) | 2020.06.12 |
__MACOSX 폴더없이 Mac zip 압축? (0) | 2020.06.12 |