GRANT
セキュリティで保護されたデータベースでは、GRANT ステートメントを使用して、テーブル、ビュー、およびストアド プロシージャのアクセス権限を管理します。GRANT では、これらの権限をユーザーに付与したり、新しいユーザーを作成したり、そのユーザーを既存のユーザー グループに割り当てたりすることができます。必要に応じて、GRANT を使用する前に、CREATE GROUP を使用して新しいグループを作成します。
以下のトピックでは、GRANT ステートメントの使用について説明します。
構文
GRANT CREATETAB | CREATEVIEW | CREATESP TO public またはユーザー/グループ名[, ユーザー/グループ名]...
GRANT LOGIN TO ユーザーおよびパスワード[, ユーザーおよびパスワード]...[IN GROUP グループ名]
GRANT 権限 ON <* | [TABLE] テーブル名 [オーナー ネーム] | VIEW ビュー名 | PROCEDURE ストアド プロシージャ名>
TO ユーザー/グループ名[, ユーザー/グループ名]...
* ::= すべてのオブジェクト(つまり、すべてのテーブル、ビュー、およびストアド プロシージャ)
権限 ::= ALL
| ALTER
| DELETE
| INSERT [(テーブルの列名[, テーブルの列名]...)]
| REFERENCES
| SELECT [(テーブルの列名[, テーブルの列名]...)]
| UPDATE [(テーブルの列名[, テーブルの列名]...)]
| EXECUTE
テーブル名 ::= ユーザー定義のテーブル名
オーナー ネーム ::= ユーザー定義のオーナー ネーム
ビュー名 ::= ユーザー定義のビュー名
ストアド プロシージャ名 ::= ユーザー定義のストアド プロシージャ名
ユーザーおよびパスワード ::= ユーザー名[:]パスワード
public またはユーザー/グループ名 ::= PUBLIC | ユーザー/グループ名
ユーザー/グループ名 ::= ユーザー名 | グループ名
ユーザー名 ::= ユーザー定義のユーザー名
テーブルの列名 ::= ユーザー定義の列名(テーブルのみ)
備考
CREATETAB、CREATESP、CREATEVIEW、および LOGIN TO キーワードは、SQL 文法の拡張機能です。GRANT ステートメントを使用して、CREATE TABLE、CREATE VIEW、および CREATE PROCEDURE に権限を付与することができます。次の表は、特定の操作に対する構文を示しています。
この操作に権限を付与する場合 | GRANT で使用するキーワード |
---|
CREATE TABLE | CREATETAB |
CREATE VIEW | CREATEVIEW |
CREATE PROCEDURE | CREATESP |
LOGIN AS GROUP MEMBER | LOGIN TO |
CREATETAB、CREATEVIEW、および CREATESP は明示的に付与する必要があります。これらの権限は、GRANT ALL ステートメントの一部として含まれません。
GRANT LOGIN TO
GRANT LOGIN TO はユーザーを作成し、そのユーザーにセキュリティで保護されたデータベースへのアクセスを許可します。ユーザーを作成するには、ユーザー名とパスワードを指定する必要があります。任意で、新しいユーザーに既存のグループを指定することもできます。必要に応じて、GRANT LOGIN TO を使用する前に、CREATE GROUP を使用して新しいグループを作成します。
権限の制約
オブジェクトの権限には次の制約が適用されます。
オブジェクトの種類別
表 24 オブジェクトの種類に適用される権限
権限 | テーブル1 | ビュー1 | ストアド プロシージャ |
---|
CREATETAB | | | |
CREATEVIEW | | | |
CREATESP | | | |
ALTER2 | | | |
DELETE | | | |
INSERT | | | |
REFERENCES | | | |
SELECT | | | |
UPDATE | | | |
EXECUTE3 | | | |
1 列はテーブルに対してのみ指定できます。ビューの権限はビュー全体に対してのみ付与でき、単一の列に対して付与することはできません。 2 テーブル、ビュー、またはストアド プロシージャを削除するには、ユーザーは対象オブジェクトの ALTER 権限を持っている必要があります。信頼されるビューおよびストアド プロシージャを削除できるのは、Master ユーザーのみです。 3 EXECUTE はストアド プロシージャにのみ適用されます。ストアド プロシージャを実行できるのは、CALL ステートメントまたは EXECUTE ステートメントのいずれかです。プロシージャは、信頼されるものでも信頼されないものでもかまいません。 信頼されるオブジェクトと信頼されないオブジェクトを参照してください。 |
ALL キーワード
表 25 ALL によって付与される権限(オブジェクトの種類別)
ALL によって含まれる権限 | テーブル | ビュー | ストアド プロシージャ |
---|
ALTER1 | | | |
DELETE | | | |
INSERT | | | |
REFERENCES | | | |
SELECT | | | |
UPDATE | | | |
EXECUTE | | | |
1 テーブル、ビュー、またはストアド プロシージャを削除するには、ユーザーは対象オブジェクトの ALTER 権限を持っている必要があります。信頼されるビューおよびストアド プロシージャを削除できるのは、Master ユーザーのみです。 |
たとえば、GRANT ALL ON * to User1 を発行した場合、User1 は表に挙げられているすべての権限を持ちます。
GRANT ALL ON VIEW myview1 TO User2 を発行した場合、User2 は myview1 の ALTER、DELETE、INSERT、UPDATE、および SELECT 権限を持ちます。
GRANT とデータのセキュリティ
以下のトピックでは、データのセキュリティを管理するための GRANT の特定用途について説明します。
ユーザーおよびグループへの権限の付与
リレーショナル セキュリティは、セキュリティを有効にしたときに、データベースヘのフル アクセス権を持つ Master という名前のデフォルト ユーザーが存在するかどうかに基づきます。セキュリティを有効にすると、Master ユーザーにパスワードの指定が必要になります。
このステートメントを実行するには、セキュリティ設定が有効になっている必要があります。
Master ユーザーは、GRANT LOGIN TO、CREATE USER、または CREATE GROUP コマンドを使用してグループやほかのユーザーを作成したり、作成したグループやユーザーのデータ アクセス権を管理したりすることができます。
すべてのユーザーに同一の権限を付与したい場合は、PUBLIC グループに権限を付与します。すべてのユーザーは、PUBLIC グループに割り当てられているデフォルトの権限を継承します。
メモ:グループを使用する場合は、ユーザーを作成する前にグループを設定する必要があります。
ユーザー名とパスワードに空白またはその他の非英数文字が含まれる場合は、ユーザー名とパスワードを二重引用符で囲む必要があります。
ユーザーとグループの詳細については、『
Advanced Operations Guide』の
Master ユーザー、
ユーザーとグループ、および『
PSQL User's Guide』の
権限の割り当て作業を参照してください。
オーナー ネームによるアクセス権の付与
オーナー ネームは、Btrieve ファイルへのアクセスのロックを解除するバイト文字列です。Btrieve オーナー ネームは、オペレーティング システムのユーザー名やデータベース ユーザー名とはまったく関係なく、ファイル アクセス パスワードとして機能します。詳細については、
オーナー ネームを参照してください。
セキュリティで保護された SQL データベース内のテーブルとして、オーナー ネームを持つ Btrieve ファイルがある場合、データベースの Master ユーザーは、そのテーブルにアクセスする権限をユーザー(Master ユーザー自身も含む)に付与するためには、GRANT ステートメントでオーナー ネームを提供する必要があります。
Master ユーザーが 1 人のユーザーに対して GRANT ステートメントを実行した場合、そのユーザーはデータベースにログインするだけで、オーナー ネームを指定しなくても、テーブルにアクセスできるようになります。この認証は、現在のデータベース接続の期間中持続します。また、SET OWNER ステートメントを使用すると、接続セッションに対して 1 つまたは複数のオーナー ネームを指定できることに留意してください。
SET OWNER を参照してください。
ユーザーがオーナー ネームを持つテーブルに対して SQL コマンドを実行しようとした場合、Master ユーザーが GRANT ステートメントでオーナー ネームを使用することにより、そのユーザーにテーブルへのアクセス権を付与していない限り、アクセスは拒否されます。
テーブルのオーナー ネームに読み取り専用設定が選択されている場合は、すべてのユーザーがこのテーブルの SELECT 権限を持ちます。
ビューおよびストアド プロシージャに対する権限
ビューおよびストアド プロシージャは、そのビューまたはストアド プロシージャによって参照されるオブジェクトに対してどのように権限を処理したいかに応じて、信頼されるものでも信頼されないものでも指定できます。
信頼されるオブジェクトと信頼されないオブジェクト
ビューおよびストアド プロシージャは、テーブルやその他のビュー、その他のストアド プロシージャなどのオブジェクトを参照します。参照されるオブジェクトごとに権限を付与することは、オブジェクトとユーザーの数に応じて、非常に時間のかかるものとなります。多様な状況に合ったより簡潔な解決法として、信頼されるビューまたは信頼されるストアド プロシージャという概念があります。
信頼されるビューまたはストアド プロシージャとは、参照されるオブジェクトごとに権限を明示的に設定しなくても実行できるものです。たとえば、信頼されるビュー myview1 がテーブル t1 と t2 を参照している場合、Master ユーザーは t1 および t2 に権限を付与しなくても myview1 に権限を付与することができます。
信頼されないビューまたはストアド プロシージャとは、参照されるオブジェクトごとに権限を明示的に設定しなければ実行できないものです。
次の表では、信頼されるオブジェクトと信頼されないオブジェクトの特性を比較しています。
表 26 信頼される/信頼されないビューおよびストアド プロシージャの特性
オブジェクト | 特性 | 注記 |
---|
信頼されるビューまたは信頼されるストアド プロシージャ | メタデータ バージョン 2 を必要とします | |
CREATE ステートメントに WITH EXECUTE AS 'MASTER' 句を必要とします | |
Master ユーザーのみがオブジェクトを作成できます | 『 Advanced Operations Guide』の Master ユーザーを参照してください。 |
Master ユーザーのみがオブジェクトを削除できます | |
Master ユーザーはほかのユーザーにオブジェクト権限を付与する必要があります | デフォルトでは、Master ユーザーのみが信頼されるビューまたはストアド プロシージャにアクセスできるので、Master ユーザーがこれらのオブジェクトに権限を付与しなければなりません。 |
GRANT および REVOKE ステートメントはオブジェクトに適用されます | |
オブジェクトは、セキュリティで保護されたデータベースまたは保護されていないデータベースに存在することができます | 『 Advanced Operations Guide』の PSQL セキュリティを参照してください。 |
信頼されるオブジェクトを信頼されないオブジェクトに変更する(またはその逆)には、オブジェクトを削除してから再作成する必要があります8 | ビューやストアド プロシージャ用の ALTER ステートメントを使用して、オブジェクトの信頼に関する特性の追加、削除を行うことはできません。信頼されるオブジェクトを信頼されないオブジェクトに変更しなければならない場合は、まずそのオブジェクトを削除してから、WITH EXECUTE AS 'MASTER' 句を指定しないでオブジェクトを作り直します。同様に、信頼されないオブジェクトを信頼されるオブジェクトに変更しなければならない場合は、まずそのオブジェクトを削除してから、WITH EXECUTE AS 'MASTER' 句を指定してオブジェクトを作り直します。 |
信頼されないビューまたは信頼されないストアド プロシージャ | 任意のユーザーがオブジェクトを作成できます | ユーザーには CREATEVIEW または CREATESP 権限が付与されている必要があります。 備考を参照してください。 |
任意のユーザーがオブジェクトを削除できます | ユーザーには、ビューまたはストアド プロシージャに対する ALTER 権限が付与されている必要があります。 GRANT を参照してください。 |
オブジェクトを削除するには ALTER 権限が必要となります | ALTER 権限は、テーブルを削除する場合にも必要です。デフォルトでは、Master ユーザーのみが信頼されるオブジェクトを削除できることに注意してください。ビューまたはストアド プロシージャの作成者でない(Master 以外の)ユーザーがビューやストアド プロシージャを削除するには、ALTER 権限が付与されている必要があります。 |
デフォルトで、すべてのユーザーはオブジェクトに対するすべての権限を持っています | メタデータ バージョン 2 では、セキュリティで保護されていないデータベースに信頼されないオブジェクトが含まれている場合、データベースのセキュリティを有効にすれば、信頼されないオブジェクトのすべての権限は自動的に PUBLIC に付与されます。 |
ビューまたはストアド プロシージャを実行するユーザーは、これらから参照されるオブジェクトの権限を必要とします | ユーザーは、最上位のオブジェクトに対する権限も持っている必要があります。つまり、ほかのオブジェクトを参照するビューやストアド プロシージャに対する権限ということです。 |
GRANT および REVOKE ステートメントはオブジェクトに適用されます | GRANT および REVOKE を参照してください。 |
オブジェクトは、セキュリティで保護されたデータベースまたは保護されていないデータベースに存在することができます | 『 Advanced Operations Guide』の PSQL セキュリティを参照してください。 |
信頼されるオブジェクトを信頼されないオブジェクトに変更する(またはその逆)には、オブジェクトを削除してから再作成する必要があります | 前述の、信頼されるビューまたは信頼されるストアド プロシージャの場合と同様です。 |
例
このセクションでは、GRANT のいくつかの例を示します。
GRANT ALL ステートメントは、指定したユーザーまたはグループに INSERT、UPDATE、ALTER、SELECT、DELETE、および REFERENCES の権限を付与します。また、辞書の CREATE TABLE 権限も付与されます。次のステートメントによって、ユーザー dannyd にテーブル Class の上記のすべての権限が付与されます。
GRANT ALL on Class to dannyd
============
次のステートメントによって、ユーザー debieq にテーブル Class の ALTER 権限が付与されます。
GRANT ALTER on Class TO debieq
============
次のステートメントによって、ユーザー keithv および miked に、テーブル Class の INSERT 権限が付与されます。このテーブルは winsvr644AdminGrp というオーナー ネームを持ちます。
GRANT INSERT ON Class winsvr644AdminGrp TO keithv, miked
============
次のステートメントによって、ユーザー keithv および miked に、テーブル Class の INSERT 権限が付与されます。
GRANT INSERT ON Class TO keithv, miked
============
次のステートメントによって、ユーザー keithv および brendanb に、Person テーブル内の 2 つの列 First_name と Last_name の INSERT 権限が付与されます。
GRANT INSERT(First_name,last_name) ON Person to keithv,brendanb
============
次のステートメントによって、ユーザー aideenw および punitas に CREATE TABLE 権限が付与されます。
GRANT CREATETAB TO aideenw, punitas
============
次の GRANT LOGIN TO ステートメントは ravi という名前のユーザーにログイン権限を与え、パスワード password を指定します。
GRANT LOGIN TO ravi:password
メモ:GRANT LOGIN TO ステートメントを使用してログイン権限を与えられたユーザー アカウントが現存しない場合、そのユーザー アカウントが作成されます。
ストアド プロシージャで GRANT LOGIN ステートメントを使用する場合は、ユーザー名とパスワードをコロンではなく空白文字で区切る必要があります。コロン文字は、ストアド プロシージャ内でローカル変数の識別に使用されます。
このユーザー名およびパスワードは PSQL データベースのみを対象としたもので、オペレーティング システム レベルで設定されているユーザー名とパスワードには無関係です。PSQL ユーザー名、グループ、およびパスワードは PSQL Control Center(PCC)を使用して設定することもできます。
次の例では、dannyd と travisk という名前のユーザーにログイン権限が与えられ、パスワードがそれぞれ password、1234567 と指定されます。
GRANT LOGIN TO dannyd:password,travisk:1234567
名前に空白が含まれる場合は、次のように二重引用符を使用できます。このステートメントによって、Jerry Gentry と Punita という名前のユーザーにログイン権限が与えられ、パスワードがそれぞれ sun、moon と指定されます。
GRANT LOGIN TO ''Jerry Gentry'' :sun, Punita:moon
次の例では、パスワード 123456 を持つ Jerry Gentry という名前のユーザーと、パスワード abcdef を持つ travisk という名前のユーザーにログイン権限が与えられます。また、グループ psql_dev にこれらのユーザーが追加されます。
GRANT LOGIN TO "Jerry Gentry":123456, travisk:abcdef in group psql_dev
============
Master ユーザーは、オーナー ネームを持たないテーブルのすべての権限を持ちます。Btrieve オーナー ネームを持つテーブルの権限を付与するには、Master ユーザーは GRANT ステートメントで正しいオーナー ネームを指定しなければなりません。
次の例では、Master ユーザーに Btrieve オーナー ネーム abcd を持つテーブル t1 の SELECT 権限が与えられます。
GRANT SELECT ON t1 'abcd' TO Master
テーブルのオーナー ネームは、PCC の[ツール]メニューにある Function Executor または Maintenance ユーティリティを使用して設定できます。詳細については、『
Advanced Operations Guide』の
オーナー ネームを参照してください。
============
Master ユーザーによる次の SQL ステートメント セットの実行後、ユーザー jsmith は現在のデータベース内のすべてのテーブルに対する SELECT 権を持ちます。また、ユーザーは tab1 の DELETE 権および tab2 の UPDATE 権も持ちます。
GRANT DELETE ON tab1 TO jsmith
GRANT SELECT ON * TO jsmith
GRANT UPDATE ON tab2 TO jsmith
その後、CREATE TABLE 権を持つユーザーによって次のステートメントが実行された場合、ユーザー jsmith は新しく作成されたテーブルの SELECT 権を持ちます。
CREATE TABLE tab3 (col1 INT)
============
GRANT CREATETAB TO user1
============
GRANT CREATESP TO user1
============
次の例では、すべてのユーザーにストアド プロシージャ cal_rtrn_rate の EXECUTE 権限が付与されます。
GRANT EXECUTE ON PROCEDURE cal_rtrn_rate TO PUBLIC
============
次の例は、Accounting グループのメンバーは employee テーブルの salary 列だけを更新できることを示しています(employee は Demodata サンプル データベースの一部です)。
次のようなストアド プロシージャが存在するとします。
CREATE PROCEDURE employee_proc_upd(in :EmpID integer, in :Salary money) WITH EXECUTE AS 'Master';
BEGIN
UPDATE employee SET Salary = :Salary WHERE EmployeeID = :Empid;
END
GRANT EXECUTE ON PROCEDURE employee_proc_upd TO Accounting
グループ Accounting に属するユーザーは、Employee テーブル内の saraly 以外の列を更新できないことに注目してください。これは、権限がストアド プロシージャに対してのみ付与されており、そのストアド プロシージャが saraly 列のみを更新するためです。
============
次の例では、Demodata サンプル データベースのセキュリティが有効で、ユーザー名 USAcctsMgr が追加されているものとします。ここで、そのユーザーに対し、テーブル Person の ID 列への SELECT 権を付与します。以下のステートメントを使用します。
GRANT SELECT ( ID ) ON Person TO 'USAcctsMgr'
関連項目