ユーザまたはロールに特権を与えます。
Synopsis
GRANT ACCESS ON namespace-list TO grantee
     [WITH GRANT OPTION] 

GRANT admin-privilege TO grantee 
     [WITH ADMIN OPTION]

GRANT role TO grantee
     [WITH ADMIN OPTION] 

GRANT %THRESHOLD literal TO grantee
     [WITH ADMIN OPTION]

GRANT object-privilege ON table-list TO grantee 
     [WITH GRANT OPTION]
引数
namespace-list 特権が与えられるネームスペースのリスト。 すべてのネームスペースに与える特権を指定するには、"*" を使用します。
grantee 特権が与えられるユーザやロールのリスト。有効値は、ユーザまたはロールのリスト、"*" (現在定義されているすべてのユーザを表す)、または _PUBLIC (現在定義されているすべてのユーザとまだ定義されていないすべてのユーザを表す) です。
admin-privilege
許可されている管理者レベル特権または管理者レベル特権のコンマで区切られたリスト。以下のうち 1 つ以上をさまざまな順序で使用してリストを構成します :
一般的な管理者特権 : %GRANT_ANY_PRIVILEGE、%CREATE_USER、%ALTER_USER、%DROP_USER、%CREATE_ROLE、%GRANT_ANY_ROLE、%DROP_ANY_ROLE
オブジェクト定義特権 : %CREATE_METHOD、%DROP_METHOD、%CREATE_FUNCTION、%DROP_FUNCTION、%CREATE_PROCEDURE、%DROP_PROCEDURE、%CREATE_QUERY、%DROP_QUERY、%CREATE_TABLE、%ALTER_TABLE、%DROP_TABLE、%CREATE_VIEW、%ALTER_VIEW、%DROP_VIEW、%CREATE_TRIGGER、%DROP_TRIGGER
%DB_OBJECT_DEFINITION : 16 種類のオブジェクト定義特権をすべて与えます。
role 特権が与えられているロール、またはコンマで区切られたロールのリスト
literal grantee に対して実行時リソース制限を指定する数値定数
object-privilege 付与対象の基本レベル特権、または基本レベル特権のコンマで区切られたリスト。以下のうち 1 つ以上を使用してリストを構成します。%ALTER、DELETE、SELECT、INSERT、UPDATE、および REFERENCES から成ります。もしくは、"ALL [PRIVILEGES]" または "*" のどちらかを引数の値として使用して、すべての特権を与えることもできます。
table-list 特権を与える対象となるテーブルまたはビューのリスト
概要
GRANT コマンドは、指定したテーブル、ビュー、または他のエンティティ上で指定したタスクを行う特権を、指定したユーザやロールに与えます。ユーザに特権を与える場合は、そのユーザが即座にその特権を行使できます。ロールに特権を与える場合は、そのロールを与えられたユーザが即座にその特権を行使できます。特権を削除すると、そのユーザは即座にその特権を失います。特定の特権は、特定のユーザに一度だけ与えればよいので効率的です。複数のユーザが同じ特権を 1 人のユーザに複数回与えることができますが、1 回の REVOKE でその特権は削除されます。
埋め込み SQL 内では GRANT 文を使用する前に、%msql ローカル変数を適切な特権を持つユーザに設定する必要があります。これを設定しないと、SQLCODE –99 エラー (特権違反) が返されます。
これらの特権の強制は、Caché 構成マネージャ[SQL セキュリティ有効] オプションによって決まります。詳細は、"Caché セキュリティ" の技術情報を参照してください。
GRANT ACCESS ON
GRANT ACCESS ON コマンドでは、Caché ネームスペースに特権を与えます。Caché 構成マネージャ[ODBC ネームスペース・セキュリティ有効] を設定すると、特権のないユーザがネームスペースにアクセスするのを制限できます。ODBC ネームスペース・セキュリティを有効にするには、[詳細] タブの [SQL] オプションを選択し、このフラグを “はい” に設定します (既定では、この値は "いいえ" で、任意のユーザが任意のネームスペースに ODBC 経由でアクセスできます)。
GRANT admin-privilege
管理者特権はユーザまたはロールに適用します。特定のオブジェクトに連携していないすべての特権 (つまりそのユーザやロールの一般特権) は、管理者特権とみなされます。
GRANT role
この形式の GRANT は、指定されたユーザにロールを割り当てます。指定されたロールが存在しない場合、Caché は SQLCODE 100 を発行します。指定されたユーザが存在しない場合、Caché は SQLCODE -118 を発行します。
   SET %msql="_SYSTEM"
   &sql(GRANT fred TO _SYSTEM)
   WRITE !,"SQL error code: ",SQLCODE
GRANT %THRESHOLD
GRANT %THRESHOLD コマンドでは、それ以上の値では処理が許可されないしきい値を指定することで、特定のユーザやロールが利用するシステム・リソースを制限できます。ユーザがクエリやレポートを実行する場合、使用する実行時リソースはしきい値と比較され、しきい値を超える場合は Caché SQL はしきい値違反エラー (SQLCODE = -113) を返し、クエリやレポートの実行を停止します。
GRANT object-privilege
オブジェクト特権はユーザまたはロールに特定のオブジェクトにある特権を与えます。 通常はテーブルまたはビューにある特権です。テーブルとビュー、またはそのどちらか一方に特権を与えると、オブジェクト特権になります。
   SET %msql="_SYSTEM"
   &sql(GRANT UPDATE ON Sample.Person TO Morrow)
   WRITE !,"SQL error code: ",SQLCODE
指定されたオブジェクトが存在しない場合、Caché は SQLCODE -30 を発行します。指定されたユーザが存在しない場合、Caché は SQLCODE -118 を発行します。指定されたオブジェクト特権がすでに与えられている場合、Caché は SQLCODE 100 を発行します。
WITH GRANT OPTION 節
オブジェクトの所有者は自動的に、このオブジェクトに関わるすべての特権を維持します。GRANT 文の TO 節は、アクセスが与えられるユーザまたはロールを指定します。grantee 指定する TO オプションを使用した後は、WITH GRANT OPTION キーワードを任意で指定して、grantee が他のユーザに同じ特権を与えることもできます。
例えば、以下のコマンドを使用して、EMPLOYEES テーブルの %ALTER、SELECT、または INSERT 特権を Chris というユーザに与えることができます。
GRANT %ALTER, SELECT, INSERT
     ON EMPLOYEES
     TO Chris
Chris に他のユーザに対するこれらの特権を与えることができるようにするために、GRANT コマンドは WITH GRANT OPTION 句を含みます。
GRANT %ALTER, SELECT, INSERT
     ON EMPLOYEES
     TO Chris WITH GRANT OPTION
%SQLCatalog_SQLUserPrivs() 呼び出しを使用した GRANT 文の結果を見出すことができます。
例えば、以下の GRANT 文を使用した後は、
GRANT %ALTER ON TestTab1Usr1 TO PUBLIC WITH GRANT OPTION
GRANT SELECT ON TestTab2Usr1 TO PUBLIC
%SQLCatalog_SQLUserPrivs('_PUBLIC') への呼び出しは、以下の結果セットを返します。
"TABLE_TYPE", "TABLE_NAME", "PRIVILEGE", "GRANTED_BY", "GRANT_OPTION" "TABLE", "TestTab1Usr1", "%ALTER", "_SYSTEM", "Yes" "TABLE", "TestTab2Usr1", "SELECT", "_SYSTEM", "No"
GRANT_OPTION (最初の行の最後のフィールド) の "Yes" は、WITH GRANT OPTION の使用を指示しています。
WITH ADMIN OPTION 節
WITH ADMIN OPTION 節が grantee に特権を与えると、grantee は自分が与えられたのと同じ特権を他のユーザに与える権利を持つことになります。システム特権を与えるには、WITH ADMIN OPTION でシステム特権が与えられているか、%GRANT_ANY_PRIVILEGE システム特権が与えられている必要があります。
WITH ADMIN OPTION での特権の付与は、同じ特権のこのオプションなしでの前回の付与に置き換わります。したがって、ユーザに WITH ADMIN OPTION なしで特権を与え、次に同じ特権を WITH ADMIN OPTION 付きで同じユーザに与えると、そのユーザは WITH ADMIN OPTION 権限を保有します。一方、WITH ADMIN OPTION なしでの付与は、同じ特権のこのオプション付きでの前回の付与に置き換わりません。特権から WITH ADMIN OPTION 権限を削除するには、その特権を削除して、この節なしで同じ特権を再度与える必要があります。
関連項目