SQL Azure におけるデータベースとログインの管理

Windows Azure Platform

Microsoft SQL Azure データベースでは、サービスにサインアップする際に、SQL Azure サーバー、master という名前のデータベース、および SQL Azure サーバーのサーバーレベル プリンシパルとなるログインがプロビジョニング プロセスによって作成されます。このログインは、オンプレミス版の SQL Server のサーバーレベル プリンシパル sa に似ています。

この SQL Azure サーバーレベル プリンシパル アカウントは常に、サーバーレベルとデータベースレベルのすべてのセキュリティを管理するためのアクセス許可を持ちます。このトピックでは、サーバーレベル プリンシパルと他のアカウントを使用して SQL Azure ログインおよびデータベースを管理する方法を説明します。 

SQL Azure セキュリティ管理の概要

SQL Azure のセキュリティ管理は、オンプレミス版の SQL Server のセキュリティ管理と基本的に同じです。まず、データベースレベルのセキュリティ管理は、使用できるパラメーターの違いを除くとほとんど同じです。ただし、SQL Azure データベースは複数の物理コンピューターにまたがることがあるため、SQL Azure のサーバーレベル管理には別の方法が採られます。次の表に、オンプレミス SQL Server と SQL Azure のセキュリティ管理の違いをまとめます。

相違点 オンプレミス SQL Server SQL Azure
サーバーレベルのセキュリティを管理する場所 SQL Server Management Studio のオブジェクト エクスプローラーSecurity フォルダー master データベース
ログインを作成するためのサーバーレベル セキュリティ ロール

securityadmin

詳細は「サーバーレベルのロール (英語)」を参照

loginmanager
ログインを管理するためのコマンド

CREATE LOGIN

ALTER LOGIN

DROP LOGIN

CREATE LOGIN

ALTER LOGIN

DROP LOGIN

(パラメーターにいくつかの制限がある。master データベースに接続する必要がある)

すべてのログインを表示するビュー sys.sql_logins

sys.sql_logins

(master データベースに接続する必要がある)

データベースを作成するためのサーバーレベル ロール

dbcreator

詳細は「サーバーレベルのロール (英語)」を参照

dbmanager
データベースを作成するためのコマンド CREATE DATABASE

CREATE DATABASE

(パラメーターにいくつかの制限がある。master データベースに接続する必要がある)

データベースの削除 DROP DATABASE

DROP DATABASE

dbmanager ロールを保有するユーザーは、作成者に関係なく、任意のデータベースに対して DROP 操作を実行できます。

すべてのデータベースを一覧表示するビュー

sys.databases

(ビュー)

sys.databases

(master データベースに接続する必要がある)

 

サーバーレベル管理とマスター データベース

SQL Azure サーバーは、データベースのグループを定義するための抽象化された要素です。1 つの SQL Azure サーバーに関連付けられるデータベースは、マイクロソフトのデータ センターにある複数の物理コンピューターに配置できます。これらすべてのデータベースに対するサーバーレベル管理は、master という 1 つのデータベースから行います。

master データベースは、ログインを記録するほか、データベースや他のログインの作成権限を持つログインを管理します。ログインやデータベースに対して CREATEALTER、または DROP を実行する際は、master データベースに接続する必要があります。master データベースにも、ログインを表示するための sys.sql_logins ビューと、データベースを表示するための sys.databases ビューがあります。

注意

USE コマンドによるデータベースの切り替えはサポートされていません。ターゲット データベースに直接接続を確立してください。

 

SQL Azure のユーザーとオブジェクトのデータベースレベル セキュリティは、オンプレミス版の SQL Server と同じ方法で管理できます。相違点は、それぞれのコマンドで使用できるパラメーターだけです。詳細については、「Transact-SQL リファレンス (SQL Azure データベース) (英語)」を参照してください。

ログインの管理

master データベースに接続し、サーバーレベル プリンシパル ログインを使用してログインを管理します。CREATE LOGINALTER LOGINDROP LOGIN の各ステートメントを使用できます。次の例は、login1 という名前のログインを作成しています。

-- first, connect to the master database
CREATE LOGIN login1 WITH password=‘<ProvidePassword>‘;

注意

ログインを作成する場合は、強力なパスワードを使用する必要があります。詳細については、「強力なパスワード (英語)」を参照してください。

 

新しいログインの使用

作成したログインを使用して SQL Azure に接続するには、まず CREATE USER コマンドを使用して、各ログインにデータベースレベルのアクセス許可を付与する必要があります。詳細については、「ログインにデータベースレベルのアクセス許可を付与する」を参照してください。

表形式データ ストリーム (TDS) の実装方法が異なるツールもあります。その場合は、<login>@<server> の形式を使用して、接続文字列内のログイン名に SQL Azure サーバー名を追加する必要があります。ログイン名と SQL Azure サーバー名は @ 記号で区切ります。たとえば、ログイン名が login1 で、SQL Azure サーバーの完全修飾名が servername.database.windows.net の場合、接続文字列のユーザー名パラメーターは login1@servername になります。この制約により、ログイン名に使用できるテキストが制限されます。詳細については、「CREATE LOGIN (SQL Azure データベース)」を参照してください。

ログインにサーバーレベルのアクセス許可を付与する

サーバーレベル プリンシパル以外のログインでサーバーレベル セキュリティを管理できるように、SQL Azure には、loginmanager (ログインの作成) および dbmanager (データベースの作成) という 2 つのセキュリティ ロールが用意されています。これらのロールは、master データベースでユーザーに割り当てる必要があります。

注意

ログインまたはデータベースを作成するには、master データベースに接続する必要があります。

 

loginmanager ロール

オンプレミス版の SQL Server の securityadmin ロールと同様に、SQL Azure でログインを作成するには loginmanager ロールが必要です。他のログインを作成できるのは、プロビジョニング プロセスによって作成されたサーバーレベル プリンシパル ログインか、loginmanager ロールを持つログインだけです。

dbmanager ロール

SQL Azure dbmanager ロールは、オンプレミス版の SQL Server の dbcreator ロールに似ています。データベースの作成には、このロールが必要です。データベースを作成できるのは、プロビジョニング プロセスによって作成されたサーバーレベル プリンシパル ログインか、dbmanager ロールを持つログインだけです。dbmanager ロールを持つログインであれば、SQL Azure CREATE DATABASE コマンドを使用してデータベースを作成できますが、このコマンドは master データベースで実行する必要があります。詳細については、「CREATE DATABASE (SQL Azure データベース)」を参照してください。

SQL Azure サーバーレベル ロールを割り当てる方法

データベースまたは他のログインを作成するためのログインを作成するには、次の手順を実行します。

  1. master データベースに接続します。
  2. CREATE LOGIN コマンドを使用して、ログインを作成します。詳細については、「CREATE LOGIN (SQL Azure データベース)」を参照してください。
  3. CREATE USER コマンドを使用して、master データベースにこのログインに対応する新しいユーザーを作成します。詳細については、「CREATE USER (SQL Azure データベース)」を参照してください。
  4. ストアド プロシージャ sp_addrolememeber を使用して、ユーザーに dbmanager ロール、loginmanager ロール、またはその両方を追加します。

login1 という名前のログインを作成し、login1User という名前の対応するデータベース ユーザーを作成する方法について、コード例を次に示します。このユーザーは、master データベースに接続している間は、データベースまたは他のログインを作成できます。

-- first, connect to the master database
CREATE LOGIN login1 WITH password=‘<ProvidePassword>‘;
CREATE USER login1User FROM LOGIN login1;
EXEC sp_addrolemember ‘dbmanager‘, ‘login1User‘;
EXEC sp_addrolemember ‘loginmanager‘, ‘login1User‘;

注意

ログインを作成する場合は、強力なパスワードを使用する必要があります。詳細については、「強力なパスワード (英語)」を参照してください。

 

ログインにデータベースレベルのアクセス許可を付与する

すべてのログインは master データベースで作成する必要があります。ログインを作成したら、別のデータベースに、そのログインに対応するユーザー アカウントを作成できるようになります。SQL Azure は、オンプレミス版の SQL Server と同じ方法でデータベース ロールをサポートします。

別のデータベースでユーザー アカウントを作成するには、次の手順を実行します。ただし、ログインもデータベースもまだ作成していないとします。

  1. loginmanager ロールと dbmanager ロールを持つログインを使用して、master データベースに接続します。
  2. CREATE LOGIN コマンドを使用して、新しいログインを作成します。詳細については、「CREATE LOGIN (SQL Azure データベース)」を参照してください。Windows 認証はサポートされていません。
  3. CREATE DATABASE コマンドを使用して、新しいデータベースを作成します。詳細については、「CREATE DATABASE (SQL Azure データベース)」を参照してください。
  4. データベースを作成したログインを使用して、新しいデータベースへの接続を確立します。
  5. CREATE USER コマンドを使用して、新しいデータベースに新しいユーザーを作成します。詳細については、「CREATE USER (SQL Azure データベース)」を参照してください。

login1 という名前のログインと database1 という名前のデータベースを作成する方法について、コード例を次に示します。

-- first, connect to the master database
CREATE LOGIN login1 WITH password=‘<ProvidePassword>‘;
CREATE DATABASE database1;

注意

ログインを作成する場合は、強力なパスワードを使用する必要があります。詳細については、「強力なパスワード (英語)」を参照してください。

 

次の例は、データベース database1 に、ログイン login1 に対応する login1User という名前のデータベース ユーザーを作成しています。

-- Establish a new connection to the database1 database
CREATE USER login1User FROM LOGIN login1;

この SQL Azure のデータベースレベルのアクセス許可モデルは、オンプレミス版の SQL Server と同じです。詳細については、SQL Server オンライン ブックの次のトピックを参照してください。

ID およびアクセス制御 (データベース エンジン) (英語)

ログイン、ユーザー、およびスキーマの管理方法に関するトピック (英語)

レッスン 2: データベース オブジェクトに対する権限の構成 (英語)

注意

SQL Azure のセキュリティ関連の Transact-SQL ステートメントは、使用できるパラメーターがわずかに異なります。詳細については、「Transact-SQL リファレンス (SQL Azure データベース) (英語)」を参照してください。

 

ログインとデータベースの表示

SQL Azure サーバーのログインとデータベースを表示するには、master データベースの sys.sql_logins ビューと sys.databases ビューをそれぞれ使用します。次の例は、SQL Azure サーバーのすべてのログインとデータベースを一覧表示する方法を示しています。

-- first, connect to the master database
SELECT * FROM sys.sql_logins;
SELECT * FROM sys.databases;

参照

概念

セキュリティのガイドラインと制限事項 (SQL Azure データベース) (英語)
SQL Azure プロビジョニング モデル

ページのトップへ