プリンシパル (データベース エンジン)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

プリンシパル は、 SQL Server リソースを要求できるエンティティです。 SQL Server の承認モデルの他のコンポーネントと同様に、プリンシパルは階層内に配置できます。 プリンシパルの効力のスコープは、プリンシパルの定義のスコープ (Windows、サーバー、データベース) と、プリンシパルが分割不可能かコレクションであるかによって異なります。 分割できないプリンシパルの例には Windows ログインがあり、コレクションであるプリンシパルの例には Windows グループがあります。 各プリンシパルには、1 つのセキュリティ識別子 (SID) があります。 このトピックは、すべてのバージョンの SQL Server に適用されますが、SQL Database または Azure Synapse Analytics ではサーバー レベルのプリンシパルでいくつかの制約があります。

SQL Server レベルのプリンシパル

  • SQL Server 認証ログイン
  • Windows ユーザーの Windows 認証ログイン
  • Windows グループの Windows 認証ログイン
  • Active Directory ユーザーの Azure Active Directory 認証ログイン
  • Active Directory グループの Azure Active Directory 認証ログイン
  • サーバー ロール

データベースレベルのプリンシパル

  • データベース ユーザー (12 種類のユーザーがあります。 詳細については、「CREATE USER」 (ユーザーの作成) を参照してください。)
  • データベース ロール
  • アプリケーション ロール

sa ログイン

SQL Server sa ログインは、サーバーレベル プリンシパルです。 このログインは、インスタンスのインストール時に既定で作成されます。 SQL Server 2005 (9.x)より、sa の既定のデータベースは master です。 これは、以前のバージョンの SQL Serverの動作から変更されています。 sa ログインは sysadmin 固定サーバーレベル ロールに属します。 sa ログインにはサーバーのすべてのアクセス許可が与えられ、制限できません。 sa ログインは削除できませんが、無効にすれば誰も利用できません。

dbo ユーザーと dbo スキーマ

dbo ユーザーは、各データベースの特別なユーザー プリンシパルです。 すべての SQL Server 管理者、sysadmin 固定サーバー ロールのメンバー、sa ログイン、データベースの所有者は dbo ユーザーとしてデータベースに入ります。 dbo ユーザーにはデータベースのすべてのアクセス許可が与えられ、制限したり、削除したりすることはできません。 dbo はデータベースの所有者 (database owner) という意味ですが、dbo ユーザー アカウントは db_owner 固定データベース ロールと同じではなく、db_owner 固定データベース ロールはデータベースの所有者として記録されているユーザー アカウントと同じではありません。
dbo ユーザーは dbo スキーマを所有します。 dbo スキーマは、その他のスキーマが指定されていない限り、すべてのユーザーの既定のスキーマとなります。 dbo スキーマは削除できません。

public のサーバー ロールとデータベース ロール

すべてのログインは public 固定サーバー ロールに属します。すべてのデータベース ユーザーは public データベース ロールに属します。 セキュリティ保護可能なリソースに対する特定の権限が与えられていないか権限が拒否されたログインまたはユーザーは、public がそのリソースに対して許可されている権限を継承します。 public 固定サーバー ロールと public 固定データベース ロールは削除できません。 ただし、public ロールからアクセス許可を取り消すことができます。 既定で public ロールにはさまざまなアクセス許可が割り当てられています。 そのようなアクセス許可のほとんどはデータベースの日常的操作、つまり、誰にでも許可されなければならない類いの操作に必要となります。 public ログインまたはユーザーからアクセス許可を取り消す際は注意してください。すべてのログインまたはユーザーに影響を与えます。 一般的に、public に対するアクセス許可は拒否しないでください。deny ステートメントは、個々に行う grant ステートメントをオーバーライドします。

INFORMATION_SCHEMA と sys のユーザーとスキーマ

各データベースには、カタログ ビューにユーザーとして表示される 2 つのエンティティ INFORMATION_SCHEMA および sys が含まれています。 データベース エンジンによる内部利用でこれらのエンティティが必要になります。 変更したり、削除したりすることはできません。

証明書ベースの SQL Server ログイン

名前が 2 つの番号記号 (##) で囲まれたサーバー プリンシパルは、内部システムでのみ使用されます。 SQL Server のインストール時に証明書から作成される以下のプリンシパルは、削除しないでください。

  • ##MS_SQLResourceSigningCertificate##
  • ##MS_SQLReplicationSigningCertificate##
  • ##MS_SQLAuthenticatorCertificate##
  • ##MS_AgentSigningCertificate##
  • ##MS_PolicyEventProcessingLogin##
  • ##MS_PolicySigningCertificate##
  • ##MS_PolicyTsqlExecutionLogin##

これらのプリンシパル アカウントのパスワードは、Microsoft に発行された証明書に基づくので、管理者は変更できません。

guest ユーザー

各データベースには、 guestの動作から変更されています。 データベースにはアクセスできるが、データベース内のユーザー アカウントは持っていないユーザーは、 guest ユーザーに許可された権限を継承します。 guest ユーザーは消去することはできませんが、その CONNECT 権限を取り消すことで無効にすることはできます。 CONNECT 権限を取り消すには、master または tempdb 以外のデータベース内で REVOKE CONNECT FROM GUEST; を実行します。

権限システムの設計の詳細については、「 データベース エンジンの権限の概要」を参照してください。

SQL Server オンライン ブックのこのセクションの内容は次のとおりです。

参照

SQL Server の保護
sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL)
sys.sql_logins (Transact-SQL)
sys.database_role_members (Transact-SQL)
サーバー レベルのロール
データベース レベルのロール