Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

GRANT

ユーザまたはロールに特権を与えます。

Synopsis

GRANT admin-privilege TO grantee [WITH ADMIN OPTION]
GRANT role TO grantee [WITH ADMIN OPTION] 

GRANT object-privilege ON object-list TO grantee [WITH GRANT OPTION] 
GRANT SELECT ON CUBE[S] object-list TO grantee [WITH GRANT OPTION] 
GRANT column-privilege (column-list) ON table TO grantee  [WITH GRANT OPTION]  

引数

grantee コンマで区切られた、1 つ以上のユーザまたはロールのリスト。有効な値は、ユーザのリスト、ロールのリスト、"*"、または _PUBLIC です。アスタリスク (*) は、現在定義されていて %All ロールを持たないすべてのユーザを指定します。_PUBLIC キーワードにより、現在定義されているすべてのユーザと未定義のユーザが指定されます。
admin-privilege

許可されている管理者レベル特権または管理者レベル特権のコンマで区切られたリスト。以下のうち 1 つ以上をさまざまな順序で使用してリストを構成できます :

%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 種類の特権をすべて与えます。

INSERT、UPDATE、および DELETE 操作のための %NOCHECK、%NOINDEX、%NOLOCK、%NOTRIGGER 特権。

role 特権が与えられているロール、またはコンマで区切られたロールのリスト
object-privilege 付与対象の基本レベル特権、または基本レベル特権のコンマで区切られたリスト。%ALTER、DELETE、SELECT、INSERT、UPDATE、EXECUTE、および REFERENCES のうち 1 つ以上を使用してリストを構成できます。"ALL [PRIVILEGES]" または “*” のどちらかを引数の値として使用して、テーブルとビューのすべての特権を与えることもできます。キューブに付与できる特権は SELECT のみです。
object-list object-privilege (複数の場合もあります) の付与先とする 1 つ以上のテーブルビュー、ストアド・プロシージャ、またはキューブのコンマ区切りリスト。SCHEMA キーワードを使用して、指定されたスキーマ内の全オブジェクトへの object-privilege の付与を指定できます。“*” を使用すると、現在のネームスペース内で非表示になっていないすべてのストアド・プロシージャ、またはすべてのテーブルに対する object-privilege の付与を指定することができます。object-list がキューブの場合、CUBE (または CUBES) キーワードが必要です。また、付与できる特権は SELECT のみです。
column-privilege 1 つ以上のリストされた列に付与される基本レベル特権。指定できるオプションは、SELECT、INSERT、UPDATE、および REFERENCES です。
column-list コンマで区切り、括弧で囲んだ 1 つ以上の列名のリスト。
table column-list 列を含む テーブル またはビューの名前。

概要

GRANT コマンドは、指定したテーブル、ビュー、列、またはその他のエンティティ上で指定タスクを実行する特権を、指定したユーザやロールに与えます。以下の基本操作を実行できます。

  • ユーザに特権を与える

  • ロールに特権を与える

  • ユーザにロールを与える

  • ロールにロールを与え、ロールの階層を作成する

ユーザに特権を与える場合は、そのユーザが即座にその特権を行使できます。ロールに特権を与える場合は、そのロールを与えられたユーザが即座にその特権を行使できます。特権を削除すると、そのユーザは即座にその特権を失います。特定の特権は、特定のユーザに一度だけ与えればよいので効率的です。複数のユーザが同じ特権を 1 人のユーザに複数回与えることができますが、1 回の REVOKE でその特権は削除されます。

特権はネームスペースごとに付与されます。

SQL 特権は、ODBC、JDBC、およびダイナミック SQL (%SQL.Statement および %Library.ResultSet) を介してのみ適用されます。

GRANT はすぐに作成および実行され、通常一度しか実行されないため、Caché では、ODBC、JDBC、またはダイナミック SQL での GRANT にはクエリ・キャッシュは作成されません。* の展開は GRANT コマンドの実行時に行われます。

GRANT admin-privilege

SQL 管理者 (admin) 特権は、ユーザまたはロールに適用します。特定のオブジェクトに結び付けられていない特権 (つまり、そのユーザやロールの一般特権) は、管理者特権と見なされます。このような特権は、現在のネームスペースに基づいて、ネームスペースごとに付与されます。

%DB_OBJECT_DEFINITION 特権は、16 個すべてのデータ定義特権を付与します。%NOCHECK、%NOINDEX、%NOLOCK、および %NOTRIGGER 特権は付与されません。それらは、明示的に付与する必要があります。

%NOCHECK、%NOINDEX、%NOLOCK、および %NOTRIGGER 特権により、INSERTUPDATEINSERT OR UPDATE、または DELETE 文の restriction 節でこれらのオプションを使用できるようになります。%NOINDEX キーワードを述語条件の前で使用しても効果はありません。TRUNCATE TABLE は、%NOTRIGGER 動作によってテーブルからのすべての行の削除を実行するため、TRUNCATE TABLE の実行には %NOTRIGGER 特権が必要となります。INSERTUPDATEINSERT OR UPDATE、または DELETE 文を作成する際にその restriction を使用するには、適切な %NOCHECK、%NOINDEX、%NOLOCK、または %NOTRIGGER 特権が必要となります。

指定された管理者特権が (例えばスペルの誤りなどの理由で) 有効な特権名でない場合でも、Caché は正常に完了し、SQLCODE 100 (データの末尾に到達) を発行します。Caché は、指定されたユーザ (またはロール) が存在するかどうかは確認しません。指定された管理者特権は有効だが、指定されたユーザ (または、ロール) が存在しない場合、Caché は SQLCODE -118 エラーを発行します。

GRANT role

この形式の GRANT は、指定されたロールにユーザを割り当てます。また、別のロールにロールを割り当てることもできます。割り当て先として指定されたロールが存在しない場合、Caché は SQLCODE 100 (データの最後に達した) を発行します。ロールへの割り当て対象として指定されたユーザ (またはロール) が存在しない場合、Caché は SQLCODE -118 エラーを発行します。SuperUser でない場合に、自身が所有していないロールを付与しようとし、さらにそのロールに対する ADMIN OPTION も保有していない場合、Caché は SQLCODE -112 エラーを発行します。

ロールの作成には、CREATE ROLE 文を使用します。ロール名が区切り文字付き識別子の場合には、ロールへの割り当て時にロール名を引用符で囲む必要があります。

ロールは、SQL の GRANT コマンドおよび REVOKE コマンド、または Caché システム・セキュリティを使用して付与または削除できます。

  • 管理ポータルに進み、システム, セキュリティ管理, ユーザ を選択し、目的のユーザで [編集] を選択してから、[ロール] タブを選択して、ユーザを 1 つまたは複数のロールに割り当てます (または割り当て解除します)。

  • 管理ポータルに進み、システム, セキュリティ管理, ロール を選択し、目的のロールで [編集] を選択してから、[割り当て先] タブを選択してロールを 1 つまたは複数のユーザに割り当てます (または割り当て解除します)。ただし、ObjectScript の $ROLES 特殊変数を使用しても、ロールに対して与えられたロールは表示されません。

GRANT object-privilege

オブジェクト特権は、ユーザまたはロールに特定のオブジェクトに対する特権を与えます。object-list に関する object-privilegegrantee に付与します。object-list では、現在のネームスペース内の 1 つまたは複数のテーブル、ビュー、ストアド・プロシージャ、またはキューブを指定できます。コンマ区切りのリストを使用することで、1 つの GRANT 文で、複数のオブジェクトに関する複数のオブジェクト特権を複数のユーザおよび/またはロールに付与できます。

以下に、使用できる object-privilege 値を示します。

  • %ALTER および DELETE の特権は、テーブルやビューの定義へのアクセス権を与えます。

  • SELECT、INSERT、UPDATE、DELETE、および REFERENCES の各特権は、テーブル・データへのアクセス権を与えます。

  • EXECUTE 特権は、ストアド・プロシージャへのアクセス権を与えます。この特権は、ストアド・プロシージャを実行したり、クエリでユーザ定義 SQL 関数を呼び出す場合に必須です。例えば、SELECT Field1,MyFunc() FROM SQLUser.MyTable では、SQLUser.MyTable に対しては SELECT 特権、SQLUser.MyFunc プロシージャに対しては EXECUTE 特権が必要になります。

  • ALL PRIVILEGES 特権は、テーブルとビューのすべての特権を与えますが、EXECUTE 特権は与えません。

object-list の値にアスタリスク (*) ワイルドカードを使用すると、現在のネームスペースのすべてのオブジェクトに対する object-privilege を付与できます。例えば、GRANT SELECT ON * TO Deborah は、このユーザに、すべてのテーブルおよびビューに対する SELECT 特権を与えます。GRANT EXECUTE ON * TO Deborah は、このユーザに、非公開でないすべてのストアド・プロシージャに対する EXECUTE 特権を与えます。

SCHEMA schema-nameobject-list 値として使用すると、現在のネームスペース内の指定されたスキーマのすべてのテーブル、ビュー、およびストアド・プロシージャへの object-privilege を付与できます。例えば、GRANT SELECT ON SCHEMA Sample TO Deborah は、このユーザに、Sample スキーマ内のすべてのオブジェクトに対する SELECT 特権を与えます。これには、このスキーマ内で将来定義されるすべてのオブジェクトが含まれます。 複数のスキーマをコンマ区切りのリストとして指定できます。例えば、GRANT SELECT ON SCHEMA Sample,Cinema TO Deborah は、Sample スキーマと Cinema スキーマの両方にあるすべてのオブジェクトに対する SELECT 特権を与えます。

キューブはスキーマ名で修飾していない SQL 識別子です。キューブの object-list を指定するには、CUBE (または CUBES) キーワードを指定する必要があります。キューブに付与できる特権は SELECT のみです。

以下の例では、特定のテーブルについて、特定のユーザーに SELECT と UPDATE の特権を付与しています。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
CreateUser
   SET x=$SYSTEM.SQL.UserExists("DeborahTest")
   IF x=0 {&sql(CREATE USER DeborahTest IDENTIFY BY birdpw)
           IF SQLCODE '= 0 {WRITE "CREATE USER error: ",SQLCODE,!
                            QUIT}
          }
   ELSE {WRITE "User DeborahTest exists, not changing privileges",!
         QUIT }
GrantPrivsToUser
   &sql(GRANT SELECT,UPDATE ON SQLUSER.T1 TO DeborahTest)
   WRITE !,"GRANT error code: ",SQLCODE
DropUser
   &sql(DROP USER DeborahTest)
     IF SQLCODE '= 0 {WRITE "DROP USER error: ",SQLCODE,!}

特権は、既存のテーブル、ビュー、またはストアド・プロシージャにのみ明示的に付与できます。指定されたされたオブジェクトが存在しない場合、Caché は SQLCODE -30 エラーを発行します。ただし、スキーマには特権を付与できます。この場合、そのスキーマ内のすべての既存オブジェクトと、そのスキーマ内に将来作成されるすべてのオブジェクト (特権を付与する時点で存在していないオブジェクト) の両方に対する特権を与えます。

テーブルの所有者が _PUBLIC の場合、ユーザには、テーブルにアクセスするためのオブジェクト特権を付与する必要はありません。

指定されたされたユーザが存在しない場合、Caché は SQLCODE -118 エラーを発行します。指定されたオブジェクト特権が既に付与されている場合、Caché は SQLCODE 100 (データの最後に達した) を発行します。

オブジェクト特権は、以下のいずれかによって付与または削除できます。

  • GRANT コマンドおよび REVOKE コマンド。

  • %SYSTEM.SQLOpens in a new tab GrantObjPriv()Opens in a new tab メソッドおよび RevokeObjPriv()Opens in a new tab メソッド。これらのメソッドは、指定されたユーザまたはロールが無効である場合、SQLCODE -118 を発行します。

  • Caché システム・セキュリティの使用。管理ポータルに進み、システム, セキュリティ管理, ユーザ (または システム, セキュリティ管理, ロール) を選択し、目的のユーザまたはロールで [編集] を選択してから、[SQLテーブル] タブまたは [SQLビュー] タブを選択します。ドロップダウン・リストから目的の [ネームスペース] を選択します。次に、[テーブルの追加] ボタンまたは [ビューの追加] ボタンを選択します。表示されたウィンドウでスキーマを選択し、1 つまたは複数のテーブルを選択して、特権を割り当てます。

%CHECKPRIV コマンドを呼び出すことにより、現在のユーザが指定されたオブジェクト特権を持っているかどうかを確認できます。以下の例のように、$SYSTEM.SQL.CheckPriv()Opens in a new tab メソッドを呼び出すことにより、指定のユーザが指定されたテーブルレベルのオブジェクト特権を持っているかどうかを確認できます。

   WRITE "SELECT privilege? ",$SYSTEM.SQL.CheckPriv("DeborahTest","1,SQLUSER.TestT1","s"),!
   WRITE "UPDATE privilege? ",$SYSTEM.SQL.CheckPriv("DeborahTest","1,SQLUSER.TestT1","u"),!
   WRITE "DELETE privilege? ",$SYSTEM.SQL.CheckPriv("DeborahTest","1,SQLUSER.TestT1","d"),!

オブジェクト所有者の特権

テーブル、ビュー、またはプロシージャの所有者は常に、その SQL オブジェクトに対するすべての SQL 特権を暗黙的に持っています。オブジェクトの所有者は、そのオブジェクトがマップされているすべてのネームスペース内でそのオブジェクトに対する特権を持っています。Caché 2013.1 より前は、オブジェクトの所有者には、コンパイルしたクラスがあるネームスペース内のオブジェクトに関する特権しかありませんでした。すべてのネームスペース内の、2013.1 より前のオブジェクトに関する特権が必要な場合は、それらのオブジェクトをリコンパイルする必要があります。

GRANT column-privilege

列特権は、指定したテーブルまたはビューの指定した列のリストに対して指定されている特権を、ユーザまたはロールに与えます。これにより、テーブルの一部の列へのアクセスを許可し、同じテーブル内の他の列へのアクセスを許可しないようにできます。また、テーブルやビュー全体に対して特権を定義する GRANT object-privilege オプションよりも、より詳細なアクセス制御を指定できます。grantee に特権を与える際は、テーブルに対するテーブルレベルの特権または列レベルの特権のいずれかを与える必要があります。両方を与える必要はありません。SELECT、INSERT、UPDATE、および REFERENCES の各特権は、個々の列内のデータに対するアクセス権を与えるために使用できます。

テーブルに対する SELECT、INSERT、UPDATE、または REFERENCES object-privilege を WITH GRANT OPTION 付きで付与されているユーザは、その他のユーザに、そのテーブルの列に対する同じタイプの column-privilege を与えることができます。

単一の列、またはコンマ区切りの列のリストを指定できます。column-list は括弧で囲む必要があります。列名は任意の順序で指定できます。重複していてもかまいません。対象となる列特権を、既にその特権を持っている列に与えても何の影響もありません。

以下の例は、2 つの列に対して UPDATE 特権を与えています。

GRANT UPDATE(Name,FavoriteColors) ON Sample.Person TO Deborah

列特権はテーブルまたはビューに与えることができます。ユーザ・リスト、ロール・リスト、*、および _PUBLIC を含む、あらゆるタイプの grantee に対して列特権を与えることができます。ただし、特権、フィールド名、またはテーブル名にアスタリスク (*) ワイルドカードを使用することはできません。

ユーザがテーブルに新しいレコードを挿入すると、データは、その列特権を与えられているフィールドにのみ挿入されます。その他すべてのデータ列は、定義された列の既定値か、既定値が定義されていない場合は NULL のいずれかに設定されます。RowID 列や Identity 列に列レベルの INSERT または UPDATE 特権を与えることはできません。INSERT 時、Caché SQL は RowID および (必要に応じて) Identity 列の値を自動的に入力します。

列レベルの特権は、SQL の GRANT コマンドおよび REVOKE コマンド、または Caché システム・セキュリティを使用して付与または削除できます。管理ポータルに進み、システム, セキュリティ管理, ユーザ (または システム, セキュリティ管理, ロール) を選択し、目的のユーザまたはロールで [編集] を選択してから、[SQLテーブル] タブまたは [SQLビュー] タブを選択します。ドロップダウン・リストから目的の [ネームスペース] を選択します。次に、[列の追加] ボタンを選択します。表示されたウィンドウでスキーマを選択し、テーブルを選択して 1 つまたは複数の列を選択し、特権を割り当てます。

複数の特権の付与

単一の GRANT 文を使用して、以下の特権の組み合わせを指定できます。

  • 1 つ以上のロール。

  • 1 つ以上のテーブルレベルの特権と、1 つ以上の列レベルの特権。複数のテーブルレベルの特権と列レベルの特権を指定するには、特権を column-list の直前に置いて、列レベルの特権を与える必要があります。そうでない場合は、テーブルレベルの特権が与えられます。

  • 1 つ以上の admin-privilege。admin-privilege とロール名またはオブジェクト特権を同一の GRANT 文で指定することはできません。これを実行しようとすると、SQLCODE -1 エラーが返されます。

以下の例は、Deborah にテーブルレベルの SELECT 特権と UPDATE 特権、および列レベルの INSERT 特権を与えています。

GRANT SELECT,UPDATE,INSERT(Name,FavoriteColors) ON Sample.Person TO Deborah

以下の例は、Deborah に列レベルの SELECT、INSERT、および UPDATE 特権を与えています。

GRANT SELECT(Name,FavoriteColors),INSERT(Name,FavoriteColors),UPDATE(FavoriteColors) ON Sample.Person TO Deborah

WITH GRANT OPTION 節

オブジェクトの所有者は自動的に、このオブジェクトにかかわるすべての特権を維持します。GRANT 文の TO 節は、アクセス権が与えられるユーザまたはロールを指定します。grantee を指定する TO オプションを使用した後は、WITH GRANT OPTION キーワードを任意で指定して、grantee が他のユーザに同じ特権を与えることもできます。WITH GRANT OPTION キーワード節は、オブジェクト特権または列特権と共に使用できます。CASCADE 付きの REVOKE コマンドを使用すると、付与されているこの階層式の一連の特権を元に戻すことができます。

例えば、以下のコマンドを使用して、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

%SQLCatalogPriv.SQLUsers() メソッド呼び出しを使用した GRANT 文の結果を見つけることができます。

スキーマ WITH GRANT OPTION に特権を付与すると、特権受領者 (1 人または複数人) は、同じスキーマ特権を他のユーザに付与できるようになります。ただし、特権受領者は、そのユーザがその特定のオブジェクトの WITH GRANT OPTION に関する特権を明示的に与えられていない限り、そのスキーマ内の指定されたオブジェクトに対する特権を付与することはできません。詳細は、以下の例を参照してください。

  • UserA および UserB には、最初は特権はありません。

  • UserA に、スキーマ Sample WITH GRANT OPTION 対する SELECT 特権を付与します。

  • UserA は、スキーマ Sample に対する SELECT 特権を UserB に付与できます。

  • UserA は、テーブル Sample.Person に対する SELECT 特権を UserB に付与することはできません

WITH ADMIN OPTION 節

WITH ADMIN OPTION 節が grantee に特権を与えると、grantee は自分が与えられたのと同じ特権を他のユーザに与える権利を持つことになります。システム特権を与えるには、そのユーザが WITH ADMIN OPTION でシステム特権を与えられている必要があります。

ユーザがロールを与えることができるのは、自分に WITH ADMIN OPTION でそのロールが与えられているか、%Admin_Secure:"U" リソースを持っている場合です。

WITH ADMIN OPTION での特権の付与は、同じ特権のこのオプションなしでの前回の付与に置き換わります。したがって、ユーザに WITH ADMIN OPTION なしで特権を与え、次に同じ特権を WITH ADMIN OPTION 付きで同じユーザに与えると、そのユーザは WITH ADMIN OPTION 権限を保有します。一方、WITH ADMIN OPTION なしでの付与は、同じ特権のこのオプション付きでの前回の付与に置き換わりません。特権から WITH ADMIN OPTION 権限を削除するには、その特権を削除して、この節なしで同じ特権を再度与える必要があります。

特権のエクスポート

特権は、$SYSTEM.SQL.Export()Opens in a new tab メソッドを使用してエクスポートできます。このメソッドでテーブルを指定すると、Caché では、テーブルレベルのすべての特権とそのテーブルに与えられた列レベルのすべての特権がエクスポートされます。詳細は、"インターシステムズ・クラス・リファレンス" を参照してください。

廃止された特権

Caché バージョン 5.1 以降、GRANT では、%GRANT_ANY_PRIVILEGE、%CREATE_USER、%ALTER_USER、%DROP_USER、%CREATE_ROLE、%GRANT_ANY_ROLE、%DROP_ANY_ROLE という一般的な管理者特権がサポートされなくなりました。これらの特権の管理は、SQL を介してではなく、システム・レベルで処理されます。これらの SQL 特権は以前のバージョンの Caché で使用可能であり、既存のコード内で使用されている場合があります。このような特権のいずれかをユーザに与えようとすると、実行はできますが、特権が与えられるのではなく、その名前のロールが与えられます。

Caché セキュリティ

埋め込み SQL 内で GRANT を使用する前に、適切な特権を持つユーザとしてログインする必要があります。特権がない場合は、SQLCODE -99 エラー (特権違反) が返されます。$SYSTEM.Security.Login()Opens in a new tab メソッドを使用して、以下のようにユーザに適切な特権を割り当ててください。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )

$SYSTEM.Security.Login メソッドを呼び出すには、%Service_Login:Use 特権が必要です。詳細は、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.SecurityOpens in a new tab" を参照してください。

特権の強制

SQL 特権は、ODBC、JDBC、およびダイナミック SQL (%SQL.Statement および %Library.ResultSet) を介してのみ適用されます。

特権の強制は、以下に示すような [SQL セキュリティ有効] 構成オプションの設定によって決まります。

既定値は “はい” (1) です。“はい” の場合、自分に特権を与えられているアクションのみユーザは実行できます。この設定を推奨します。

このオプションが “いいえ” (0) に設定された場合、この設定の変更後に開始された新しいプロセスすべてで SQL セキュリティは無効になります。つまり、特権ベースのテーブルやビューのセキュリティは抑制されていることを意味します。ユーザを指定しなくてもテーブルの作成が可能になります。この場合、管理ポータルはユーザとして “_SYSTEM” を、埋め込み SQL はユーザとして "" (空文字列) を割り当てます。ユーザは特権がなくてもテーブルやビューに対してアクションを実行することができます。詳細は、"Caché 詳細構成設定リファレンス" で説明されている SQL 構成設定を参照してください。

以下の例は、ユーザとロールを作成してからそのロールをユーザに割り当てます。ユーザまたはロールが既に存在する場合は、SQLCODE -118 エラーが発行されます。特権またはロールが既に割り当てられている場合、エラーは発行されません (SQLCODE = 0)。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
CreateUser
   SET x=$SYSTEM.SQL.UserExists("MarthaTest")
   IF x=0 {&sql(CREATE USER MarthaTest IDENTIFY BY birdpw)
           IF SQLCODE '= 0 {WRITE "CREATE USER error: ",SQLCODE,!
                            QUIT}
          }
   ELSE {WRITE "User MarthaTest exists, not changing its roles",!
         QUIT }
CreateRoleAndGrant
   &sql(CREATE ROLE workerbee)
   WRITE !,"CREATE ROLE error code: ",SQLCODE
   &sql(GRANT %CREATE_TABLE TO workerbee)
   WRITE !,"GRANT privilege error code: ",SQLCODE
   &sql(GRANT workerbee TO MarthaTest)
   WRITE !,"GRANT role error code: ",SQLCODE

以下の例は、複数の特権の割り当てを示しています。ここでは、1 人のユーザと 2 つのロールを作成します。単一の GRANT 文は、これらのロールと admin-privilege のリストをユーザに割り当てます。ユーザまたはロールが既に存在する場合は、SQLCODE -118 エラーが発行されます。特権またはロールが既に割り当てられている場合、エラーは発行されません (SQLCODE = 0)。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
CreateUser
   SET x=$SYSTEM.SQL.UserExists("NoahTest")
   IF x=0 {&sql(CREATE USER NoahTest IDENTIFY BY birdpw)
           IF SQLCODE '= 0 {WRITE "CREATE USER error: ",SQLCODE,!
                            QUIT}
          }
   ELSE {WRITE "User NoahTest exists, not changing its roles",!
         QUIT }
Create2RolesAndGrant
   &sql(CREATE ROLE workerbee)
   WRITE !,"CREATE ROLE 1 error code: ",SQLCODE
   &sql(CREATE ROLE drone)
   WRITE !,"CREATE ROLE 2 error code: ",SQLCODE
   &sql(GRANT workerbee,drone,%CREATE_TABLE,%DROP_TABLE TO NoahTest)
   WRITE !,"GRANT roles & privileges error code: ",SQLCODE

以下の例は、現在定義されていて %All ロールを持たないすべてのユーザに、現在のネームスペース内のすべてのテーブルに対する 7 つすべての基本的な特権を与えています。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
    &sql(GRANT * ON * TO *)

関連項目

FeedbackOpens in a new tab