ALTER AUTHORIZATION (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric のSQL 分析エンドポイント
Microsoft Fabric のウェアハウス
セキュリティ保護可能なエンティティの所有権を変更します。
Note
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
構文
-- 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 プールでサポートされていません。
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-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 以降。 |
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 OWNER エンティティの所有者となるセキュリティ プリンシパルの名前。 データベース オブジェクトはデータベース プリンシパル (データベース ユーザーまたはデータベース ロール) が所有する必要があります。 サーバー オブジェクト (データベースなど) はサーバー プリンシパル (ログイン) が所有する必要があります。 SCHEMA OWNER を *principal_name- として指定して、オブジェクトのスキーマを所有するプリンシパルがオブジェクトを所有する必要があることを示します。
解説
ALTER AUTHORIZATION は、所有者が存在するエンティティの所有権を変更するときに使用できます。 データベースに含まれるエンティティの所有権は、任意のデータベース レベルのプリンシパルに譲渡できます。 サーバー レベルのエンティティの所有権は、サーバー レベルのプリンシパルのみに譲渡できます。
重要
SQL Server 2005 (9.x) 以降では、ユーザーは他のデータベース ユーザーが所有するスキーマに含まれる OBJECT または TYPE を所有できます。 これは、以前のバージョンの SQL Serverの動作から変更されています。 詳細については、「OBJECTPROPERTY (Transact-SQL)」と「TYPEPROPERTY (Transact-SQL)」を参照してください。
スキーマに含まれるエンティティのうち、種類が "オブジェクト" のエンティティ (テーブル、ビュー、関数、プロシージャ、キュー、およびシノニム) の所有権は譲渡できます。
リンク サーバー、統計、制約、ルール、デフォルト、トリガー、Service Broker キュー、資格情報、パーティション関数、パーティション構成、データベース マスター キー、サービス マスター キー、およびイベント通知の各エンティティの所有権は譲渡できません。
セキュリティ保護可能なリソース クラス (サーバー、ログイン、ユーザー、アプリケーション ロール、および列) のメンバーの所有権は譲渡できません。
SCHEMA OWNER オプションは、スキーマに含まれるエンティティの所有権を譲渡する場合にのみ有効です。 SCHEMA OWNER を使用すると、エンティティの所有権は、所属するスキーマの所有者に譲渡されます。 スキーマに含まれるのは、OBJECT、TYPE、または XML SCHEMA COLLECTION クラスのエンティティのみです。
対象のエンティティがデータベース以外であり、エンティティを新しい所有者に譲渡する場合は、すべての権限が削除されます。
注意事項
SQL Server 2005 (9.x) でのスキーマの動作は、以前のバージョンの SQL Server から変更されました。 コードで、スキーマがデータベース ユーザーと同じであることが前提となっている場合、正しい結果が返されない場合があります。 以下の DDL ステートメントが使用されているデータベースでは、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。 これらのいずれかのステートメントが使用されたデータベースでは、新しいカタログ ビューを使用する必要があります。 新しいカタログ ビューでは、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 | これらのエンティティの所有権をロールまたはグループに譲渡することはできません。 |
ENDPOINT | プリンシパルは、ログインであることが必要です。 |
データベースに対する ALTER AUTHORIZATION
SQL Server の場合
新しい所有者の要件: 新しい所有者プリンシパルは、次のいずれかである必要があります。
- SQL サーバー認証ログイン。
- Windows ユーザー (グループではなく) を表す Windows 認証ログイン。
- Windows グループを表す Windows 認証ログインを使って認証を行う Windows ユーザー。
ALTER AUTHORIZATION ステートメントを実行するユーザーの要件:sysadmin 固定サーバー ロールのメンバーではないユーザーの場合は、データベースに対する TAKE OWNERSHIP アクセス許可以上と、新しい所有者ログインに対する IMPERSONATE アクセス許可が必要です。
Azure SQL Database の場合
新しい所有者の要件: 新しい所有者プリンシパルは、次のいずれかである必要があります。
- SQL サーバー認証ログイン。
- 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 サーバー認証ログイン | SQL サーバー認証ログイン | Success |
SQL サーバー認証ログイン | Microsoft Entra ユーザー | 失敗 |
Microsoft Entra ユーザー | SQL サーバー認証ログイン | 成功 |
Microsoft Entra ユーザー | Microsoft Entra ユーザー | 成功 |
データベースの 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 は、ユーザーがロールのメンバーであることを示します。
アクセス許可
エンティティに対する 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 ユーザーに変更する
次の例では、 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)」