Azure Synapse Analytics での SQL 認証

Azure Synapse Analytics には、リソースの使用を制御できる 2 つの SQL フォームファクターがあります。 この記事では、2 つのフォームファクターがユーザー認証を制御する方法について説明します。

Synapse SQL を承認するには、次の 2 種類の承認を使用できます。

  • Microsoft Entra 承認
  • SQL 承認

SQL 承認を使用すると、使い慣れた方法でレガシ アプリケーションを Synapse SQL に接続できます。 しかし、Microsoft Entra 認証を使用すると、SQL プールなどの Azure Synapse リソースへのアクセスを一元的に管理できます。 Azure Synapse Analytics では、ワークスペースの作成時とその後の両方で、SQL 認証などのローカル認証の無効化がサポートされています。 ローカル認証は無効化された場合、許可されているユーザーがいつでも有効にできます。 Microsoft Entra のみの認証の詳細については、Azure Synapse Analytics でのローカル認証の無効化に関する記事を参照してください。

管理者アカウント

管理者の機能を果たす管理者アカウントには、 2 つのアカウント (SQL 管理者ユーザーネームActive Directory 管理者) があります。 SQL プールのこれらの管理者アカウントを識別するには、Azure portal を開き、Synapse ワークスペースの [プロパティ] タブに移動します。

SQL Server Admins

  • SQL 管理ユーザー名

    Azure Synapse Analytics を作成するときは、サーバー管理者のログインに名前を指定する必要があります。 このアカウントは SQL サーバーによって master データベースのログインとして作成されます。 このアカウントは、SQL Server 認証 (ユーザー名とパスワード) を使用して接続します。 これらのアカウントのうち、存在できるのは 1 つだけです。

  • SQL Active Directory 管理者

    1 つの Microsoft Entra アカウント (個人またはセキュリティ グループ アカウント) も、管理者として構成できます。 Microsoft Entra 管理者の構成は省略可能ですが、Microsoft Entra アカウントを使用して Synapse SQL に接続する場合は、Microsoft Entra 管理者を構成する必要があります

    • Microsoft Entra 管理者アカウントでは専用 SQL プールへのアクセスを制御する一方、Synapse RBAC ロールはサーバーレス プールへのアクセスを制御するために使用できます (Synapse 管理者Synapse SQL 管理者ロールなど)。

SQL管理者ユーザー名SQL Active Directory 管理者アカウントには、次の特性があります。

  • サーバー上の任意の SQL Database に自動的に接続できる唯一のアカウントです (それ以外のアカウントでユーザー データベースに接続するには、そのデータベースの所有者であるか、そのユーザー データベースのユーザー アカウントを持っている必要があります)。
  • これらのアカウントは、dbo ユーザーとしてユーザー データベースにアクセスし、ユーザー データベースに対するすべてのアクセス許可を持ちます (ユーザー データベースの所有者も、dbo ユーザーとしてデータベースにアクセスします)。
  • master データベースに dbo ユーザーとしてアクセスしません。また、master データベースでの制限されたアクセス許可があります。
  • 標準 SQL Server sysadmin 固定サーバー ロールのメンバーではありません。このロールは SQL Database では使用できません。
  • データベース、ログイン、master データベースのユーザー、およびサーバーレベルの IP ファイアウォール規則を作成、変更、削除できます。
  • dbmanager ロールと loginmanager ロールに対して、メンバーの追加と削除を実行できます。
  • sys.sql_logins システム テーブルを表示できます。

注意

ユーザーが Active Directory 管理者と Synapse 管理者として構成されており、その後、Active Directory 管理者ロールから削除された場合、ユーザーは Synapse の専用 SQL プールにアクセスできなくなります。 専用 SQL プールへのアクセスを回復するには、削除してから Synapse 管理者ロールに追加する必要があります。

サーバーレス SQL プールへのアクセス権を持つユーザーを管理するには、次の手順を使用します。

サーバーレス SQL プールに対するログインを作成するには、次の構文を使用します。

CREATE LOGIN Mary WITH PASSWORD = '<strong_password>';
-- or
CREATE LOGIN [Mary@domainname.net] FROM EXTERNAL PROVIDER;

ログインを作成したら、サーバーレス SQL プール エンドポイント内の個々のデータベースにユーザーを作成し、これらのユーザーに必要なアクセス許可を付与することができます。 ユーザーを作成するには、次の構文を使用できます。

CREATE USER Mary FROM LOGIN Mary;
-- or
CREATE USER Mary FROM LOGIN Mary@domainname.net;
-- or
CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER;

ログインとユーザーを作成したら、通常の SQL Server 構文を使用して権限を付与できます。

管理者以外のユーザー

一般に、管理者以外のアカウントは、master データベースにアクセスする必要はありません。 CREATE USER (Transact-SQL) ステートメントを使用して、データベース レベルの包含データベース ユーザーを作成してください。

このユーザーは、Microsoft Entra 認証の包含データベース ユーザー (Microsoft Entra 認証用の環境を構成した場合)、SQL Server 認証の包含データベース ユーザー、または SQL Server 認証ログインに基づく SQL Server 認証ユーザー (前の手順で作成したもの) にすることができます。

ユーザーを作成するには、データベースに接続し、次の例のようなステートメントを実行します。

CREATE USER Mary FROM LOGIN Mary;
CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER;

最初、ユーザーを作成できるのは、データベースの管理者の 1 人か所有者だけです。 新しいユーザーの作成を他のユーザーに許可するには、次のようなステートメントを使用して、選択したユーザーに ALTER ANY USER アクセス許可を付与します。

GRANT ALTER ANY USER TO Mary;

データベースのフル コントロールを他のユーザーに与えるには、そのユーザーを db_owner 固定データベース ロールのメンバーにします。

Azure SQL Database または Synapse Serverless で、ALTER ROLE ステートメントを使用します。

ALTER ROLE db_owner ADD MEMBER Mary;

専用 SQL プールで、EXEC sp_addrolemember を使用します。

EXEC sp_addrolemember 'db_owner', 'Mary';

Note

サーバー ログインに基づくデータベース ユーザーを作成する 1 つの一般的な理由は、複数のデータベースへのアクセスを必要とするユーザーのためです。 包含データベース ユーザーは個別のエンティティであるため、各データベースは、それぞれが独自のユーザーとパスワードを保持します。 ユーザーは各データベースのパスワードをすべて記憶する必要があるため、オーバーヘッドが発生する可能性があり、多数のデータベースのパスワードを変更する必要が生じたときに対応できない可能性があります。

グループとロール

効率的なアクセス管理では、個々のユーザーではなく、グループとロールに割り当てられたアクセス許可を使用します。

  • Microsoft Entra 認証を使用する場合は、Microsoft Entra ユーザーを Microsoft Entra グループに配置します。 そのグループ用に包含データベース ユーザーを作成します。 1 人または複数のデータベース ユーザーをデータベース ロールに追加し、データベース ロールにアクセス許可を割り当てます。

  • SQL Server 認証を使用する場合は、データベースに包含データベース ユーザーを作成します。 1 人または複数のデータベース ユーザーをデータベース ロールに追加し、データベース ロールにアクセス許可を割り当てます。

データベース ロールは、db_ownerdb_ddladmindb_datawriterdb_datareaderdb_denydatawriterdb_denydatareader などの組み込みロールを指定できます。 db_owner は、少数のユーザーのみに完全なアクセス許可を付与する際によく使用されます。 他の固定データベース ロールは、開発段階の単純なデータベースをすばやく取得するには便利ですが、運用段階のほとんどのデータベースには推奨されません。

たとえば、db_datareader 固定データベース ロールは、データベース内のすべてのテーブルへの読み取りアクセスを許可しますが、これは、通常、必要以上のことです。

それよりも、CREATE ROLE ステートメントを使用して独自のユーザー定義データベース ロールを作成し、各ロールに対してビジネスのニーズに応じて必要な最小限のアクセス許可を慎重に付与する方がはるかに適切です。 ユーザーが複数のロールのメンバーである場合は、それらのアクセス許可すべてが集約されます。

アクセス許可

SQL Database では、個別に許可または拒否できるアクセス許可が 100 個を超えています。 これらのアクセス許可の多くは、入れ子になっています。 たとえば、スキーマに対する UPDATE アクセス許可には、そのスキーマ内の各テーブルに対する UPDATE アクセス許可が含まれています。 ほとんどのアクセス許可システムと同様に、アクセス許可の拒否は許可をオーバーライドします。

入れ子になっている性質と、アクセス許可の数により、データベースを正しく保護するのに適切なアクセス許可システムを設計するには、慎重な調査を行う場合があります。

権限 (データベース エンジン)」にあるアクセス許可の一覧から開始し、データベース エンジンのアクセス許可のポスター サイズ画像を確認してください。

注意点と制約

SQL Database のログインとユーザーの管理では、以下の点を考慮してください。

  • CREATE/ALTER/DROP DATABASE ステートメントを実行する場合は、master データベースに接続する必要があります。
  • サーバー管理者ログインに対応するデータベース ユーザーは、変更または削除できません。
  • Microsoft Entra のみの認証が有効になっている場合、サーバー管理者は無効になります。
  • サーバー管理者ログインの既定の言語は英語 (米国) です。
  • 管理者 (サーバー管理者ログインまたは Microsoft Entra 管理者) と、master データベースの dbmanager データベース ロールのメンバーにのみ、CREATE DATABASEDROP DATABASE ステートメントを実行するアクセス許可があります。
  • CREATE/ALTER/DROP LOGIN ステートメントを実行するときは、master データベースに接続している必要があります。 ただし、ログインの使用はお勧めできません。 代わりに、包含データベース ユーザーを使用してください。 詳細については、「包含データベース ユーザー - データベースの可搬性を確保する」を参照してください。
  • ユーザー データベースに接続するには、接続文字列にそのデータベースの名前を指定する必要があります。
  • サーバーレベル プリンシパル ログインと、master データベースの loginmanager データベース ロールのメンバーにのみ、CREATE LOGINALTER LOGINDROP LOGIN ステートメントを実行する権限があります。
  • ADO.NET アプリケーションで CREATE/ALTER/DROP LOGINCREATE/ALTER/DROP DATABASE ステートメントを実行する場合、パラメーター化コマンドは使用できません。 詳細については、「 コマンドとパラメーター」をご覧ください。
  • CREATE USER ステートメントを FOR/FROM LOGIN オプションと共に実行する場合、これが Transact-SQL バッチ内の唯一のステートメントである必要があります。
  • ALTER USER ステートメントを WITH LOGIN オプションと共に実行する場合、これが Transact-SQL バッチ内の唯一のステートメントである必要があります。
  • Microsoft Entra のみの認証が Azure Synapse ワークスペースに対して有効になっている場合、CREATE/ALTER/DROP LOGINCREATE/ALTER/DROP USER ステートメントはサポートされません。
  • ユーザーに対して CREATE/ALTER/DROP を実行するには、データベースに対する ALTER ANY USER 権限が必要です。
  • データベース ロールの所有者が、そのデータベース ロールに対して他のデータベース ユーザーの追加または削除を行おうとすると、「User or role 'Name' does not exist in this database.」というエラーが発生する場合があります。このエラーは、所有者からはユーザーが見えないために発生します。 この問題を解決するには、そのユーザーに対する VIEW DEFINITION 権限をロールの所有者に許可します。

次のステップ

詳細については、「 包含データベース ユーザー - データベースの可搬性を確保する」を参照してください。