16.20 - DEFINER - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-162K-JPN
Language
日本語 (日本)

外部ルーチンとオペレーティング システム プラットフォームのユーザーを、その外部ルーチンが含まれているデータベースに関連付けるキーワード。

DEFINERを指定する場合、database_nameまたはuser_nameは外部ルーチンの含まれているデータベースであることが必要です。

DEFINERまたはINVOKERのいずれかを指定できます。ただし両方を指定することはできません。

DEFAULT
以下の文のEXTERNAL SECURITY DEFINER句で許可名が指定されないすべての外部ルーチンに関し、その外部ルーチンとこの許可とを関連付ける、DEFINERキーワードの任意指定のキーワード修飾子を指定します。
デフォルトのDEFINERオブジェクトは、1つのデータベースにつき1つしか割り当てることができません。それ以外のすべてのDEFINERオブジェクトについては、特定のDEFINER名が必要です。
現行の、または指定されたデータベースにデフォルトのDEFINERがすでに存在する場合、システムは要求元にエラーを返します。

例: DEFINER許可の作成

次の例では、名前がsales_processing、ユーザー名がsalesmng、およびユーザー パスワードがmysecretのDEFINER許可オブジェクトを作成します。

    CREATE AUTHORIZATION sales_processing AS DEFINER
    USER 'salesmng'
    PASSWORD 'mysecret';

EXTERNAL SECURITY DEFINER句の含まれている外部ルーチンが同じOSユーザー許可の下で実行された場合、どのユーザーがこれを実行しているかにかかわらず、Teradata DatabaseはこのOSプラットフォーム ユーザーのコンテキストを使って、そのような外部ルーチンすべてを実行します。

例: 外部セキュリティ句のDEFINER許可の作成

次の例は、外部セキュリティ句EXTERNAL SECURITY DEFINER salesが含まれているすべての外部ルーチンを持つ、特定のDEFINER許可名salesを作成します。許可オブジェクト名salesは、外部セキュリティ句に指定されるテキストの一部です。この仕様により、システムはデータ ディクショナリ内の許可オブジェクトSYSLIB.salesを評価し、評価が済んだら、指定のユーザー コンテキストを使用して外部ルーチンを実行します。

    CREATE AUTHORIZATION SYSLIB.sales AS DEFINER
     USER 'SalesDept'
     PASSWORD 'ikcerednep';

例: デフォルトのDEFINER許可の作成

次の例では、accountingという名前のDEFINER許可をSYSLIBデータベースの中に作成します。クライアント ユーザー名はaccdept、ユーザー パスワードはnesuahkcotskです。

    CREATE AUTHORIZATION SYSLIB.accounting AS DEFINER DEFAULT
      USER 'accdept'
      PASSWORD 'nesuahkcotsk';

この例では、SYSLIBデータベースのDEFAULT許可としてaccountingを、指定されたクライアント ユーザー名accdeptに関連付けます。

accdeptはDEFAULT許可オブジェクトであるため、システムはこれを、EXTERNAL SECURITY DEFINER句の含まれているすべての外部ルーチンに関連付けます。データベースSYSLIB内のEXTERNAL SECURITY DEFINER句を含む外部ルーチンはすべて、このリクエストによって定義されるユーザー コンテキストを使って実行されます。

1つのデータベースにつきデフォルトのDEFINERオブジェクトは1つのみという制約があることにご注意ください。それ以外のものについては、特定の名前が必要です。DEFAULTがすでに存在する場合、システムは要求元にエラーを返します。