適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric の SQL データベース
セキュリティ保護可能なエンティティの所有権を変更します。
Note
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
}
Note
この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
Arguments
<class_type> は、所有者が変更中となっているエンティティのセキュリティ保護可能なクラスを指定します。 既定値は OBJECT です。
| Class | 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 以降。 |
| CERTIFICATE | 適用対象: 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を参照してください。 |
| ENDPOINT | 適用対象: 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 所有者 エンティティを所有する証券プリンシパルの名前。 データベース オブジェクトはデータベース プリンシパル (データベース ユーザーまたはデータベース ロール) が所有する必要があります。 サーバー オブジェクト (データベースなど) はサーバー プリンシパル (ログイン) が所有する必要があります。 オブジェクトSCHEMAスキーマを所有するプリンシパルが所有していることを示すために、*principal_name-をOWNERとして指定してください。
Remarks
ALTER AUTHORIZATION 所有者を持つ任意の法人の所有権を変更するために使用できます。 データベースに含まれるエンティティの所有権は、任意のデータベース レベルのプリンシパルに譲渡できます。 サーバー レベルのエンティティの所有権は、サーバー レベルのプリンシパルのみに譲渡できます。
Important
SQL Server 2005(9.x)以降、ユーザーは他のデータベースユーザーが所有するスキーマに含まれるオブジェクトやTYPEを所有できるようになりました。 これは、以前のバージョンの SQL Serverの動作から変更されています。 詳細については、「OBJECTPROPERTY (Transact-SQL)」と「TYPEPROPERTY (Transact-SQL)」を参照してください。
スキーマに含まれるエンティティのうち、種類が "オブジェクト" のエンティティ (テーブル、ビュー、関数、プロシージャ、キュー、およびシノニム) の所有権は譲渡できます。
リンク サーバー、統計、制約、ルール、デフォルト、トリガー、Service Broker キュー、資格情報、パーティション関数、パーティション構成、データベース マスター キー、サービス マスター キー、およびイベント通知の各エンティティの所有権は譲渡できません。
セキュリティ保護可能なリソース クラス (サーバー、ログイン、ユーザー、アプリケーション ロール、および列) のメンバーの所有権は譲渡できません。
SCHEMA OWNERオプションは、スキーマに含まれるエンティティの所有権を移転する場合のみ有効です。 SCHEMA 所有者はエンティティの所有権を、そのスキーマの所有者に移転します。 OBJECT、 TYPE、または XML SCHEMA COLLECTION クラスのエンティティのみがスキーマ包含されます。
対象のエンティティがデータベース以外であり、エンティティを新しい所有者に譲渡する場合は、すべての権限が削除されます。
Note
スキーマは、データベース ユーザーと同等ではありません。 システム カタログ ビューを使用して、データベース ユーザーとスキーマの違いを特定します。
また、次の点も注意してください。
Important
オブジェクトの所有者を調べる唯一の信頼できる方法は、sys.objects カタログ ビューのクエリを実行することです。 型の所有者を調べる唯一の信頼性のある方法は、TYPEPROPERTY 関数を使用する方法です。
特殊ケースと条件
次の表は、権限を変更する場合の特殊ケースと例外、および条件の一覧です。
| Class | Condition |
|---|---|
| OBJECT | トリガー、制約、ルール、デフォルト、統計、システム オブジェクト、キュー、インデックス付きビュー、またはインデックス付きビューのあるテーブルの所有権は変更できません。 |
| SCHEMA | 所有権を譲渡すると、スキーマに含まれるオブジェクトの所有者が明示的に指定されていない場合は、そのオブジェクトに対する権限が削除されます。 sys、dbo、または information_schema の所有者は変更できません。 |
| TYPE | sysやinformation_schemaに属する TYPE の所有権を変更することはできません。 |
| CONTRACT、 MESSAGE TYPE、または SERVICE | システム エンティティの所有権は変更できません。 |
| SYMMETRIC KEY | グローバル一時キーの所有権は変更できません。 |
| CERTIFICATE または ASYMMETRIC KEY | これらのエンティティの所有権をロールまたはグループに譲渡することはできません。 |
| ENDPOINT | プリンシパルは、ログインであることが必要です。 |
ALTER AUTHORIZATION データベース用
SQL Server の場合
新しい所有者の要件: 新しい所有者プリンシパルは、次のいずれかである必要があります。
- SQL サーバー認証ログイン。
- Windows ユーザー (グループではなく) を表す Windows 認証ログイン。
- Windows グループを表す Windows 認証ログインを使って認証を行う Windows ユーザー。
ALTER AUTHORIZATION文を実行する人の要件:システム管理者固定サーバーの役割でない場合は、データベースに対して少なくともTAKE OWNERSHIP権限を持ち、新しい所有者ログインではIMPERSONATE権限が必要です。
Azure SQL Database の場合
新しい所有者の要件: 新しい所有者プリンシパルは、次のいずれかである必要があります。
- SQL サーバー認証ログイン。
- Microsoft Entra ID に存在するフェデレーション ユーザー (グループではありません)。
- マネージド ユーザー (グループではない) または Microsoft Entra ID に存在するアプリケーション。
新しい所有者が Microsoft Entra ユーザーの場合、新しい所有者が新しいデータベース所有者 (dbo) になるデータベース内にユーザーとして存在することはできません。 Microsoft Entraユーザーはまずデータベースから削除されなければ、ALTER AUTHORIZATION文を実行してデータベースの所有権を新しいユーザーに移します。 SQL Database を使用して Microsoft Entra ユーザーを構成する方法の詳細については、「 Microsoft Entra 認証の構成」を参照してください。
ALTER AUTHORIZATION文を実行する人の要件:そのデータベースの所有者を変更するには、ターゲットデータベースに接続する必要があります。
次の種類のアカウントは、データベースの所有者を変更できます。
- サービス レベル のプリンシパル ログイン。これは、Azure の のサーバーが作成されたときにプロビジョニングされた SQL 管理者 。
- 論理サーバーの Microsoft Entra 管理者。.
- データベースの現在の所有者。
次の表は要件をまとめたものです。
| Executor | Target | Result |
|---|---|---|
| SQL サーバー認証ログイン | SQL サーバー認証ログイン | Success |
| SQL サーバー認証ログイン | Microsoft Entra ユーザー | Fail |
| Microsoft Entra ユーザー | SQL サーバー認証ログイン | 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-XXXX-XXXX-XXXXXXXXXXXX など) になります。 これを確認するには、Microsoft Entra ID でユーザーのオブジェクト ID を チェック。 SQL Server 認証ログイン ユーザーがデータベース所有者である場合、データベースの所有者を確認するには、master データベースで次のステートメントを実行します。
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 ユーザーをデータベースの個々の所有者として使用する代わりに、固定データベース ロール db_owner のメンバーとして Microsoft Entra グループを使用します。 次の手順では、無効なログインをデータベース所有者として構成し、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 は、ユーザーがロールのメンバーであることを示します。
Permissions
エンティティに対する TAKE OWNERSHIP 権限が必要です。 新しい所有者がステートメントを実行するユーザーではない場合は、次の条件に応じた権限が必要になります。1) 新しい所有者がユーザーまたはログインの場合は、新しい所有者に対する IMPERSONATE 権限。2) 新しい所有者がロールまたはロールのメンバーシップの場合は、ロールに対する ALTER 権限。3) 新しい所有者がアプリケーション ロールの場合は、アプリケーション ロールに対する ALTER 権限。
Examples
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. テーブルの所有者を変更する
以下の各例では、Sprockets データベースの Parts テーブルの所有者を、データベース ユーザー 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 ユーザーに変更する
次の例では、 cqclinic.onmicrosoft.comという名前のカスタム Microsoft Entra ドメインを持つ組織内の 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)」