レッスン 2: データベース オブジェクトに対するアクセス許可の構成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAnalytics Platform System (PDW)

注意

Transact-SQL を使用したクエリの実行の概要」ラーニング パスでは、より詳しい内容と実用的な例が提供されています。

データベースへのアクセス権をユーザーに付与するには、次の 3 つの手順があります。 まず、ログインを作成します。 ユーザーはこのログインを使用して、 SQL Server データベース エンジンに接続できます。 次に、指定したデータベースでユーザーとしてログインを構成します。 最後に、データベース オブジェクトに対する権限をユーザーに付与します。 このレッスンではこれらの 3 つの手順を紹介し、ビューとストアド プロシージャをオブジェクトとして作成する方法について説明します。

注意

このレッスンでは、レッスン 1: データベース オブジェクトの作成で作成されたオブジェクトを使用します。 レッスン 2 に進む前に、レッスン 1 を完了してください。

前提条件

このチュートリアルを実行するには、SQL Server Management Studio と SQL Server インスタンスへのアクセスが必要です。

SQL Server インスタンスへのアクセス権を持っていない場合は、次のリンクからプラットフォームを選択します。 SQL 認証を選択する場合は、SQL Server のログイン資格情報を使用します。

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。 このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。 SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。 よろしくお願いいたします。

ログインを作成します

データベース エンジンにアクセスするには、ユーザーのログインが必要です。 ログインは、ユーザーの ID を Windows のアカウントまたは Windows グループのメンバーとして表すか、 SQL Server のみに存在する SQL Serverログインを使用することができます。 できるだけ Windows 認証を使用してください。

既定では、コンピューターの管理者には SQL Serverへのフル アクセス権が与えられます。 このレッスンでは、これより特権の少ないユーザーが必要なので、コンピューターに新しいローカルの Windows 認証アカウントを作成します。 そのためには、コンピューターの管理者であることが条件となります。 その後、この新しいユーザーに SQL Server へのアクセスを許可します。

新しい Windows アカウントの作成

  1. [スタート] を選択し、[実行] を選択し、[開く] ボックスに「%SystemRoot%\system32\compmgmt.msc /s」と入力して [OK] を選択すると、コンピューターの管理プログラムが開きます。
  2. [システム ツール][ローカル ユーザーとグループ] を展開し、[ユーザー] を右クリックして、[新しいユーザー] を選択します。
  3. [ ユーザー名 ] ボックスに、「 Mary」と入力します。
  4. [パスワード] および [パスワードの確認入力] ボックスに強力なパスワードを入力し、[作成] を選択して、新しいローカルの Windows ユーザーを作成します。

SQL ログインの作成

SQL Server Management Studioのクエリ エディター ウィンドウで、次のコードを入力して実行します。 computer_name は自分のコンピューター名に置き換えます。 FROM WINDOWS は、Windows がユーザーを認証することを示します。 省略可能な DEFAULT_DATABASE 引数は、接続文字列で別のデータベースが指定されていない場合、MaryTestData データベースに接続します。 このステートメントでは、セミコロンが Transact-SQL ステートメントのオプションの終了文字として使用されています。

CREATE LOGIN [computer_name\Mary]
    FROM WINDOWS
    WITH DEFAULT_DATABASE = [TestData];
GO

これでユーザー名 Maryが承認され、 SQL Serverのこのインスタンスへのアクセスがコンピューターによって認証されます。 コンピューターに SQL Server のインスタンスが複数ある場合は、 Mary がアクセスする各インスタンスでログインを作成する必要があります。

注意

Mary はドメインのアカウントではないため、このユーザー名はこのコンピューターでしか認証できません。

データベースへのアクセスを許可

これで Mary アカウントは SQL Server のこのインスタンスにアクセスできるようになりますが、データベースにアクセスする権限はありません。 アカウントがデータベース ユーザーとして承認されるまでは、アカウントは既定のデータベース TestData であってもアクセスできません。

Mary にアクセスを許可するには、TestData データベースに切り替えてから、CREATE USER ステートメントを使って、Mary という名前のユーザーにログインをマップします。

データベースにユーザーを作成する

次のステートメントを入力して実行し ( computer_name をコンピューターの名前に置き換える)、 MaryTestData データベースへのアクセス権を与えます。

USE [TestData];
GO

CREATE USER [Mary] FOR LOGIN [computer_name\Mary];
GO

これで、Mary は、 SQL Server と TestData の両方のデータベースにアクセスできます。

ビューとストアド プロシージャの作成

管理者は Products テーブルおよび vw_Names ビューから SELECT を実行し、pr_Names プロシージャを実行できますが、Mary は実行できません。 Mary に必要な権限を付与するには、GRANT ステートメントを使用します。

ストアド プロシージャへのアクセス許可の付与

次のステートメントを実行して、 Mary ストアド プロシージャの EXECUTE 権限を pr_Names に与えます。

GRANT EXECUTE ON pr_Names TO Mary;
GO

このシナリオでは、Mary はストアド プロシージャを使用して Products テーブルにのみアクセスできます。 Mary がビューに対して SELECT ステートメントを実行できるようにする場合は、 GRANT SELECT ON vw_Names TO Maryも実行する必要があります。 データベース オブジェクトへのアクセス権を削除するには、REVOKE ステートメントを使用します。

Note

テーブル、ビュー、およびストアド プロシージャが同じスキーマに所有されていない場合は、権限を付与すると、複雑になります。

GRANT について

ストアド プロシージャを実行するには、EXECUTE 権限が必要です。 データにアクセスしたり、データを変更するには、SELECT、INSERT、UPDATE、および DELETE 権限が必要です。 GRANT ステートメントは、テーブルを作成する権限など、他の権限にも使用されます。

次のステップ

次の記事では、他のレッスンで作成されたデータベース オブジェクトを削除する方法について説明します。

詳細については、次の記事に進んでください