Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ SQL の使用法 » ストアドプロシージャ、トリガ、バッチ、ユーザ定義関数 » プロシージャ » プロシージャとファンクションを設定し所有者または呼び出し側の権限で実行する

 

16.0 より前のバージョンのシステムプロシージャを呼び出し側または定義者として実行する

テーブルの変更のような、データベースで権限付きタスクを実行する 16.0 より前のバージョンのソフトウェアに存在するシステムプロシージャには、呼び出し側または定義者 (所有者) のどちらの権限でも実行できるものがあります。データベースを作成または初期化する場合、これらの特別なシステムプロシージャを、その所有者 (定義者) の権限で実行するか、または呼び出し側の権限で実行するかを指定できます。

データベースがこれらのシステムプロシージャを定義者モードで実行するように設定されている場合は、すでに必要な権限を持っている定義者 (通常は dbo ロールまたは SYS ロール) の権限でプロシージャが実行されるため、追加の権限は必要ありません。

呼び出し側モードで実行するようにデータベースが設定されている場合、呼び出し側はプロシージャのマニュアルに記載されている権限を持っている必要があります。呼び出し側には、プロシージャに対する EXECUTE 権限も必要ですが、これは、PUBLIC のメンバーであることにより継承されます。

注意

ユーザ定義のプロシージャのデフォルトの権限は、呼び出し側/定義者モードの影響を受けることはありません。つまり、ユーザ定義のプロシージャの定義で呼び出し側または定義者が指定されていない場合、プロシージャは定義者の権限で実行されます。

次の方法の 1 つを使用して、データベースでこれらのシステムプロシージャの作成時またはアップグレード時の実行方法を制御できます。

  • CREATE DATABASE...SYSTEM PROCEDURE AS DEFINER 文   CREATE DATABASE...SYSTEM PROCEDURE AS DEFINER OFF の指定は、データベースサーバが呼び出し側の権限を適用することを意味します。これは、新しいデータベースのデフォルトの動作です。

    CREATE DATABASE...SYSTEM PROCEDURE AS DEFINER ON の指定は、データベースサーバが定義者 (所有者) の権限を適用することを意味します。これは、16.0 より前のバージョンのデータベースのデフォルトの動作です。

  • ALTER DATABASE UPGRADE...SYSTEM PROCEDURE AS DEFINER 文   この句は、CREATE DATABASE 文と同じ動作となります。句が指定されていない場合は、アップグレードされたデータベースの既存の動作が維持されます。たとえば、16.0 より前のバージョンのデータベースをアップグレードした場合、定義者の権限による実行がデフォルトとなります。

  • -pd オプション、初期化ユーティリティ (dbinit)   データベースの作成時に -pd オプションを指定すると、データベースサーバは、これらのシステムプロシージャの実行時に定義者の権限を適用します。-pd オプションを指定しない場合は、呼び出し側の権限の適用がデフォルトの動作となります。

  • -pd オプション、アップグレードユーティリティ (dbupgrad)   データベースのアップグレード時に -pd Y オプションを指定すると、データベースサーバは、これらのシステムプロシージャの実行時に定義者の権限を適用します。

    -pd N オプションを指定すると、これらのシステムプロシージャの実行時に、データベースサーバは呼び出し側の権限を適用します。

    このオプションが指定されていない場合は、アップグレードされたデータベースの既存の動作が維持されます。

注意

PUBLIC システムロールには、すべてのシステムプロシージャに対する EXECUTE 権限が付与されます。新しく作成されたユーザには、デフォルトで PUBLIC ロールが付与されます。したがって、ユーザはシステムの EXECUTE 権限をすでに持っていることになります。

ユーザ定義関数とプロシージャのデフォルトは、呼び出し側と定義者の決定の影響を受けません。つまり、これらのシステムプロシージャを呼び出し側として実行するよう選択した場合でも、ユーザ定義のプロシージャは定義者のままです。

 呼び出し側/定義者設定の影響を受けるプロシージャのリスト
 呼び出し側/定義者設定に関係なく呼び出し側の権限で実行されるプロシージャのリスト
 参照

データベース (SQL) が使用するセキュリティモデルの決定