ALTER AUTHORIZATION(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric SQL 데이터베이스에 있는 Microsoft Fabric Warehouse의 SQL Server Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) SQL 분석 엔드포인트
보안 개체의 소유권을 변경합니다.
참고 항목
Microsoft Entra ID는 이전에 Azure Active Directory(Azure AD)로 알려졌습니다.
Syntax
-- Syntax for SQL Server
ALTER AUTHORIZATION
ON [ <class_type>:: ] entity_name
TO { principal_name | SCHEMA OWNER }
[;]
<class_type> ::=
{
OBJECT | ASSEMBLY | ASYMMETRIC KEY | AVAILABILITY GROUP | CERTIFICATE
| CONTRACT | TYPE | DATABASE | ENDPOINT | FULLTEXT CATALOG
| FULLTEXT STOPLIST | MESSAGE TYPE | REMOTE SERVICE BINDING
| ROLE | ROUTE | SCHEMA | SEARCH PROPERTY LIST | SERVER ROLE
| SERVICE | SYMMETRIC KEY | XML SCHEMA COLLECTION
}
-- Syntax for SQL Database
ALTER AUTHORIZATION
ON [ <class_type>:: ] entity_name
TO { principal_name | SCHEMA OWNER }
[;]
<class_type> ::=
{
OBJECT | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE
| TYPE | DATABASE | FULLTEXT CATALOG
| FULLTEXT STOPLIST
| ROLE | SCHEMA | SEARCH PROPERTY LIST
| SYMMETRIC KEY | XML SCHEMA COLLECTION
}
-- Syntax for Azure Synapse Analytics and Microsoft Fabric
ALTER AUTHORIZATION ON
[ <class_type> :: ] <entity_name>
TO { principal_name | SCHEMA OWNER }
[;]
<class_type> ::= {
SCHEMA
| OBJECT
}
<entity_name> ::=
{
schema_name
| [ schema_name. ] object_name
}
-- Syntax for Parallel Data Warehouse
ALTER AUTHORIZATION ON
[ <class_type> :: ] <entity_name>
TO { principal_name | SCHEMA OWNER }
[;]
<class_type> ::= {
DATABASE
| SCHEMA
| OBJECT
}
<entity_name> ::=
{
database_name
| schema_name
| [ schema_name. ] object_name
}
참고
이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.
인수
<class_type> 소유자가 변경될 엔터티의 보안 개체 클래스입니다. OBJECT가 기본값입니다.
클래스 | Product |
---|---|
OBJECT | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System(PDW). |
ASSEMBLY | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
ASYMMETRIC KEY | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
AVAILABILITY GROUP | 적용 대상: SQL Server 2012 이상. |
인증서 | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
CONTRACT | 적용 대상: SQL Server 2008(10.0.x) 이상 |
DATABASE | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. 자세한 내용은 아래의 데이터베이스에 대한 ALTER AUTHORIZATION을 참조하세요. |
엔드포인트 | 적용 대상: SQL Server 2008(10.0.x) 이상 |
FULLTEXT CATALOG | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
FULLTEXT STOPLIST | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
MESSAGE TYPE | 적용 대상: SQL Server 2008(10.0.x) 이상 |
REMOTE SERVICE BINDING | 적용 대상: SQL Server 2008(10.0.x) 이상 |
ROLE | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
ROUTE | 적용 대상: SQL Server 2008(10.0.x) 이상 |
SCHEMA | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System(PDW). |
SEARCH PROPERTY LIST | 적용 대상: SQL Server 2012 (11.x) 이상, Azure SQL Database. |
SERVER ROLE | 적용 대상: SQL Server 2008(10.0.x) 이상 |
SERVICE | 적용 대상: SQL Server 2008(10.0.x) 이상 |
SYMMETRIC KEY | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
TYPE | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
XML SCHEMA COLLECTION | 적용 대상: SQL Server 2008(10.0.x) 이상, Azure SQL Database. |
entity_name 엔터티의 이름입니다.
principal_name | 엔터티를 소유할 보안 주체의 스키마 소유자 이름입니다. 데이터베이스 보안 주체 즉, 데이터베이스 사용자 또는 역할이 데이터베이스 개체를 소유해야 합니다. 서버 보안 주체(로그인)가 서버 개체(예: 데이터베이스)를 소유해야 합니다. SCHEMA OWNER를 *principal_name-으로 지정하여 개체의 스키마를 소유하는 보안 주체가 해당 개체를 소유하도록 표시합니다.
설명
ALTER AUTHORIZATION을 사용하면 소유자가 있는 엔터티의 소유권을 변경할 수 있습니다. 데이터베이스 수준 엔터티의 소유권은 데이터베이스 수준의 모든 보안 주체에게 이전할 수 있습니다. 서버 수준 엔터티의 소유권은 서버 수준 보안 주체에게만 이전할 수 있습니다.
중요
SQL Server 2005(9.x)부터 사용자는 다른 데이터베이스 사용자가 소유한 스키마에 포함된 OBJECT 또는 TYPE을 소유할 수 있습니다. 이 동작은 이전 버전의 SQL Server에서 변경되었습니다. 자세한 내용은 OBJECTPROPERTY(Transact-SQL) 및 TYPEPROPERTY(Transact-SQL)을 참조하세요.
"object" 형식의 스키마 수준 엔터티인 테이블, 뷰, 함수, 프로시저, 큐 및 동의어 엔터티의 소유권은 이전할 수 있습니다.
연결된 서버, 통계, 제약 조건, 규칙, 기본값, 트리거, Service Broker 큐, 자격 증명, 파티션 함수, 파티션 구성표, 데이터베이스 마스터 키, 서비스 마스터 키 및 이벤트 알림 엔터티의 소유권은 이전할 수 없습니다.
서버, 로그인, 사용자, 애플리케이션 역할 및 열 보안 개체 클래스의 멤버 소유권은 이전할 수 없습니다.
SCHEMA OWNER 옵션은 스키마 수준 엔터티의 소유권을 이전하는 경우에만 유효합니다. SCHEMA OWNER는 엔터티의 소유권을 엔터티가 속한 스키마의 소유자에게 이전합니다. 스키마 수준 엔터티는 OBJECT, TYPE 또는 XML SCHEMA COLLECTION 클래스뿐입니다.
대상 엔터티가 데이터베이스가 아니고 엔터티가 새 소유자에게 이전되는 경우 대상에 대한 모든 사용 권한이 삭제됩니다.
주의
SQL Server 2005(9.x)에서는 스키마 동작이 이전 버전의 SQL Server와 다르게 변경되었습니다. 스키마가 데이터베이스 사용자와 같다고 가정하는 코드에서 올바른 결과가 반환되지 않을 수도 있습니다. sysobjects를 비롯한 이전 카탈로그 뷰는 CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION 등의 DDL 문이 사용된 데이터베이스에서 사용하지 않아야 합니다. 이러한 문이 사용된 데이터베이스에서는 새 카탈로그 뷰를 사용해야 합니다. 새 카탈로그 뷰는 SQL Server 2005(9.x)에 도입된 보안 주체와 스키마 분리를 고려합니다. 카탈로그 뷰에 대한 자세한 내용은 카탈로그 뷰(Transact-SQL)를 참조하십시오.
다음 사항도 유의해야 합니다.
중요
개체의 소유자를 확인하는 신뢰할 수 있는 유일한 방법은 sys.objects 카탈로그 보기를 쿼리하는 것입니다. 형식의 소유자를 확인하는 신뢰할 수 있는 유일한 방법은 TYPEPROPERTY 함수를 사용하는 것입니다.
특수 상황과 상태
다음 표에서는 인증 변경에 적용되는 특수 상황, 예외 및 상태를 보여 줍니다.
클래스 | 조건 |
---|---|
OBJECT | 트리거, 제약 조건, 규칙, 기본값, 통계, 시스템 개체, 큐, 인덱싱된 뷰 또는 인덱싱된 뷰가 있는 테이블의 소유권을 변경할 수 없습니다. |
SCHEMA | 소유권이 이전될 때 명시적 소유자가 없는 스키마 수준 개체에 대한 권한이 삭제됩니다. sys, dbo 또는 information_schema의 소유자를 변경할 수 없습니다. |
TYPE | sys 또는 information_schema에 속하는 TYPE의 소유권을 변경할 수 없습니다. |
CONTRACT, MESSAGE TYPE 또는 SERVICE | 시스템 엔터티의 소유권을 변경할 수 없습니다. |
SYMMETRIC KEY | 전역 임시 키의 소유권을 변경할 수 없습니다. |
CERTIFICATE 또는 ASYMMETRIC KEY | 이러한 엔터티의 소유권을 역할이나 그룹에 이전할 수 없습니다. |
엔드포인트 | 보안 주체는 로그인이어야 합니다. |
데이터베이스에 대한 ALTER AUTHORIZATION
SQL Server의 경우
새 소유자 요구 사항: 새 소유자 보안 주체는 다음 중 하나여야 합니다.
- SQL Server 인증 로그인입니다.
- Windows 사용자(그룹이 아닌)를 나타내는 Windows 인증 로그인입니다.
- Windows 그룹을 나타내는 Windows 인증 로그인을 통해 인증하는 Windows 사용자입니다.
ALTER AUTHORIZATION 문을 실행하는 사용자 요구 사항:sysadmin 고정 서버 역할의 구성원이 아닌 경우 최소한 데이터베이스에 대한 TAKE OWNERSHIP 권한과 함께 새 소유자 로그인에 대한 IMPERSONATE 권한이 있어야 합니다.
Azure SQL 데이터베이스의 경우
새 소유자 요구 사항: 새 소유자 보안 주체는 다음 중 하나여야 합니다.
- SQL Server 인증 로그인입니다.
- Microsoft Entra ID에 페더레이션된 사용자(그룹이 아님)입니다.
- 관리되는 사용자(그룹이 아님) 또는 Microsoft Entra ID에 있는 애플리케이션입니다.
새 소유자가 Microsoft Entra 사용자인 경우 새 소유자가 새 데이터베이스 소유자(dbo)가 되는 데이터베이스에 사용자로 존재할 수 없습니다. 데이터베이스 소유권을 새 사용자로 변경하는 ALTER AUTHORIZATION 문을 실행하기 전에 먼저 Microsoft Entra 사용자를 데이터베이스에서 제거해야 합니다. SQL Database를 사용하여 Microsoft Entra 사용자를 구성하는 방법에 대한 자세한 내용은 Microsoft Entra 인증 구성을 참조하세요.
ALTER AUTHORIZATION 문을 실행하는 사용자 요구 사항: 해당 데이터베이스의 소유자를 변경하려면 대상 데이터베이스에 연결해야 합니다.
다음과 같은 형식의 계정이 데이터베이스의 소유자를 변경할 수 있습니다.
- Azure에서 논리 서버를 만들 때 프로비전된 SQL 관리자인 서비스 수준 보안 주체 로그인입니다.
- 논리 서버에 대한 Microsoft Entra 관리자입니다.
- 현재 데이터베이스 소유자입니다.
다음 테이블은 요구 사항에 대한 요약입니다.
실행기 | 대상 | 결과 |
---|---|---|
SQL Server 인증 로그인 | SQL Server 인증 로그인 | Success |
SQL Server 인증 로그인 | Microsoft Entra 사용자 | 실패 |
Microsoft Entra 사용자 | SQL Server 인증 로그인 | Success |
Microsoft Entra 사용자 | Microsoft Entra 사용자 | Success |
데이터베이스의 Microsoft Entra 소유자를 확인하려면 사용자 데이터베이스에서 다음 Transact-SQL 명령을 실행합니다(이 예제 testdb
에서는).
SELECT CAST(owner_sid as uniqueidentifier) AS Owner_SID
FROM sys.databases
WHERE name = 'testdb';
출력은 데이터베이스 소유자로 할당된 Microsoft Entra 사용자 또는 서비스 주체의 개체 ID에 해당하는 GUID(예: XXXXXXXX-XXXX-XXXXXXXXXXXX)입니다. Microsoft Entra ID에서 사용자의 개체 ID를 확인하여 이를 확인할 수 있습니다. SQL Server 인증 로그인 사용자가 데이터베이스 소유자인 경우 해당 데이터베이스 소유자를 확인하려면 마스터 데이터베이스에서 다음 명령문을 실행합니다.
SELECT d.name, d.owner_sid, sl.name
FROM sys.databases AS d
JOIN sys.sql_logins AS sl
ON d.owner_sid = sl.sid;
모범 사례
Microsoft Entra 사용자를 데이터베이스의 개별 소유자로 사용하는 대신 Microsoft Entra 그룹을 db_owner 고정 데이터베이스 역할의 구성원으로 사용합니다. 다음 단계에서는 사용하지 않도록 설정된 로그인을 데이터베이스 소유자로 구성하고 Microsoft Entra 그룹(mydbogroup
)을 db_owner 역할의 구성원으로 만드는 방법을 보여 줍니다.
MICROSOFT Entra 관리자로 SQL Server에 로그인하고 데이터베이스 소유자를 사용 안 함 SQL Server 인증 로그인으로 변경합니다. 예를 들어 사용자 데이터베이스에서 다음을 실행 합니다.
ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
데이터베이스를 소유해야 하는 Microsoft Entra 그룹을 만들고 사용자 데이터베이스에 사용자로 추가합니다. 예시:
CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
사용자 데이터베이스에서 Microsoft Entra 그룹을 나타내는 사용자를 db_owner 고정 데이터베이스 역할에 추가합니다. 예시:
ALTER ROLE db_owner ADD MEMBER mydbogroup;
이제 mydbogroup
구성원은 db_owner 역할의 구성원으로서 데이터베이스를 중앙 관리할 수 있습니다.
- 이 그룹의 구성원이 Microsoft Entra 그룹에서 제거되면 이 데이터베이스에 대한 dbo 권한이 자동으로 손실됩니다.
- 마찬가지로 새 멤버가 Microsoft Entra 그룹에 추가
mydbogroup
되면 이 데이터베이스에 대한 dbo 액세스 권한을 자동으로 얻습니다.
특정 사용자에게 효과적인 dbo 권한이 있는지를 확인하려면 사용자가 다음 명령문을 실행하게 합니다.
SELECT IS_MEMBER ('db_owner');
반환 값 1은 사용자가 역할의 멤버라는 것을 나타냅니다.
사용 권한
엔터티에 대한 TAKE OWNERSHIP 권한이 필요합니다. 새 소유자가 이 문을 실행하는 사용자가 아니면 1) 새 소유자가 사용자이거나 로그인인 경우 새 소유자에 대한 IMPERSONATE 권한, 2) 새 소유자가 역할인 경우 역할의 멤버 자격이나 역할에 대한 ALTER 권한 또는 3) 새 소유자가 애플리케이션 역할인 경우 애플리케이션 역할에 대한 ALTER 권한도 필요합니다.
예제
A. 테이블의 소유권 이전
다음 예에서는 Sprockets
테이블의 소유권을 MichikoOsada
사용자에게 이전합니다. 테이블은 Parts
스키마 내부에 있습니다.
ALTER AUTHORIZATION ON OBJECT::Parts.Sprockets TO MichikoOsada;
GO
쿼리가 다음과 같을 수도 있습니다.
ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO
개체 스키마가 문의 일부로 포함되지 않으면 데이터베이스 엔진은 사용자 기본 스키마에서 개체를 찾게 됩니다. 예를 들면 다음과 같습니다.
ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
B. 뷰 소유권을 스키마 소유자에게 이전
다음 예에서는 ProductionView06
뷰의 소유권을 뷰가 포함된 스키마의 소유자에게 이전합니다. 뷰는 Production
스키마 내부에 있습니다.
ALTER AUTHORIZATION ON OBJECT::Production.ProductionView06 TO SCHEMA OWNER;
GO
C. 스키마의 소유권을 사용자에게 이전
다음 예에서는 SeattleProduction11
스키마의 소유권을 SandraAlayo
사용자에게 이전합니다.
ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO
D. 엔드포인트의 소유권을 SQL Server 로그인에게 이전
다음 예에서는 CantabSalesServer1
엔드포인트의 소유권을 JaePak
에게 이전합니다. 엔드포인트는 서버 수준의 보안 개체이므로 서버 수준 보안 주체에게만 소유권을 이전할 수 있습니다.
적용 대상: SQL Server 2008(10.0.x) 이상
ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO
E. 테이블의 소유자 변경
다음 각 예제는 Parts
데이터베이스에서 Sprockets
테이블의 소유자를 MichikoOsada
데이터베이스 사용자로 변경합니다.
ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON dbo.Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::dbo.Sprockets TO MichikoOsada;
F. 데이터베이스의 소유자 변경
적용 대상: SQL Server 2008(10.0.x) 이상, Analytics Platform System(PDW), SQL Database.
다음 예에서는 Parts
데이터베이스의 소유자를 로그인 MichikoOsada
로 변경합니다.
ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;
G. 데이터베이스 소유자를 Microsoft Entra 사용자로 변경
다음 예제에서는 사용자 지정 Microsoft Entra 도메인이 있는 cqclinic.onmicrosoft.com
조직의 SQL Server에 대한 Microsoft Entra 관리자가 다음 명령을 사용하여 데이터베이스 targetDB
의 현재 소유권을 변경하고 기존 Microsoft Entra 사용자를 richel@cqclinic.onmicorsoft.com
새 데이터베이스 소유자로 만들 수 있습니다.
ALTER AUTHORIZATION ON database::targetDB TO [rachel@cqclinic.onmicrosoft.com];
참고 항목
OBJECTPROPERTY(Transact-SQL)TYPEPROPERTY(Transact-SQL)EVENTDATA(Transact-SQL)