GRANT
セキュリティで保護されたデータベースでは、GRANT ステートメントを使用して、テーブル、ビュー、およびストアド プロシージャの権限を管理します。GRANT では、これらの権限をユーザーに設定したり、新しいユーザーを作成したり、そのユーザーを既存のユーザー グループに割り当てたりすることができます。必要に応じて、GRANT を使用する前に、CREATE GROUP を使用して新しいグループを作成します。
構文
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 に権限を付与することができます。次の表は、特定の操作に対する構文を示しています。
CREATETAB、CREATEVIEW、および CREATESP は明示的に付与する必要があります。これらの権限は、GRANT ALL ステートメントの一部として含まれません。
GRANT LOGIN TO
GRANT LOGIN TO はユーザーを作成し、そのユーザーにセキュリティで保護されたデータベースへのアクセスを許可します。ユーザーを作成するには、ユーザー名とパスワードを指定する必要があります。任意で、新しいユーザーに既存のグループを指定することもできます。必要に応じて、GRANT LOGIN TO を使用する前に、CREATE GROUP を使用して新しいグループを作成します。
制約
権限には次の制約が適用されます。
オブジェクトの種類別
1 列はテーブルに対してのみ指定できます。ビューの権限はビュー全体に対してのみ付与でき、単一の列に対して付与することはできません。
2 テーブル、ビュー、またはストアド プロシージャを削除するには、ユーザーは対象オブジェクトの ALTER 権限を持っている必要があります。信頼されるビューおよびストアド プロシージャを削除できるのは、Master ユーザーのみです。
3 EXECUTE はストアド プロシージャにのみ適用されます。ストアド プロシージャを実行できるのは、CALL ステートメントまたは EXECUTE ステートメントのいずれかです。プロシージャは、信頼されるものでも信頼されないものでもかまいません。信頼されるオブジェクトと信頼されないオブジェクトを参照してください。
ALL キーワード
1 テーブル、ビュー、またはストアド プロシージャを削除するには、ユーザーは対象オブジェクトの ALTER 権限を持っている必要があります。信頼されるビューおよびストアド プロシージャを削除できるのは、Master ユーザーのみです。
たとえば、GRANT ALL ON * to User1 を発行した場合、User1 は表に挙げられているすべての権限を持ちます。
GRANT ALL ON VIEW myview1 TO User2 を発行した場合、User2 は myview1 の ALTER、DELETE、INSERT、UPDATE、および SELECT 権限を持ちます。
ユーザーとグループ
リレーショナル セキュリティは、セキュリティを有効にしたときに、データベースヘのフル アクセス権を持つ Master という名前のデフォルト ユーザーが存在するかどうかに基づきます。セキュリティを有効にすると、Master ユーザーにパスワードの指定が必要になります。
このステートメントを実行するには、セキュリティ設定が有効になっている必要があります。
Master ユーザーは、GRANT LOGIN TO、CREATE USER、または CREATE GROUP コマンドを使用してグループやほかのユーザーを作成したり、作成したグループやユーザーにデータ アクセス権限を定義したりすることができます。
すべてのユーザーに同一の権限を付与したい場合は、PUBLIC グループに権限を付与します。すべてのユーザーは、PUBLIC グループに割り当てられているデフォルトの権限を継承します。
メモ: グループを使用する場合は、ユーザーを作成する前にグループを設定する必要があります。
ユーザー名とパスワードに空白またはその他の非英数文字が含まれる場合は、ユーザー名とパスワードを二重引用符で囲む必要があります。
ユーザーとグループの詳細については、『Advanced Operations Guide』の Master ユーザーユーザーとグループ、および『PSQL User's Guide』の権限の割り当て作業を参照してください。
オーナー ネーム
オーナー ネームは、Btrieve ファイルへのアクセスのロックを解除するバイトの文字列です。オーナー ネームと、システム ユーザー名あるいはリレーショナル データベース ユーザー名とはまったく関係がありません。オーナー ネームは、ファイル パスワードと考えてください。オーナー ネームは大文字小文字を区別します。
セキュリティで保護された SQL データベース内のテーブルであるファイルに Btrieve オーナー ネームが設定されている場合、ODBC データベースの Master ユーザーは、そのテーブルに対する権限を任意のユーザー(Master ユーザーを含む)に付与するためには、すべての GRANT ステートメントでオーナー ネームを使用する必要があります。
オーナー ネームを含む GRANT ステートメントを特定のユーザーに対して発行すると、そのユーザーはデータベースにログインすることで、毎回オーナー ネームを指定しなくても、指定されたテーブルにアクセスできるようになります。また、SET OWNER ステートメントを使用すると、現在のデータベース接続中に使用するオーナー ネームを 1 つまたは複数指定できることに注意してください。SET OWNER を参照してください。
ユーザーが Btrieve オーナー ネームを持つテーブルに SQL アクセス方法を介してアクセスしようとした場合、Master ユーザーが GRANT ステートメントで正しいオーナー ネームを使ってそのユーザーにテーブル権限を付与していない限り、アクセスは許可されません。
テーブルが読み取り専用属性のオーナー ネームを持っている場合、Master ユーザーはそのオーナー ネームに他の SELECT 権を明確に付与しなくても、このテーブルの SELECT 権限を持ちます。
ビューおよびストアド プロシージャに対する権限
ビューおよびストアド プロシージャは、そのビューまたはストアド プロシージャによって参照されるオブジェクトに対してどのように権限を処理したいかに応じて、信頼されるものでも信頼されないものでも指定できます。
信頼されるオブジェクトと信頼されないオブジェクト
ビューおよびストアド プロシージャは、テーブルやその他のビュー、その他のストアド プロシージャなどのオブジェクトを参照します。参照されるオブジェクトごとに権限を付与することは、オブジェクトとユーザーの数に応じて、非常に時間のかかるものとなります。多様な状況に合ったより簡潔な解決法として、信頼されるビューまたは信頼されるストアド プロシージャという概念があります。
信頼されるビューまたはストアド プロシージャとは、参照されるオブジェクトごとに権限を明示的に設定しなくても実行できるものです。たとえば、信頼されるビュー myview1 がテーブル t1 と t2 を参照している場合、Master ユーザーは t1 および t2 にユーザー権限を付与しなくても myview1 にユーザー権限を付与することができます。
信頼されないビューまたはストアド プロシージャとは、参照されるオブジェクトごとに権限を明示的に設定しなければ実行できないものです。
次の表では、信頼されるオブジェクトと信頼されないオブジェクトの特性を比較しています。
信頼されるビューまたは信頼されるストアド プロシージャ
PSQLメタデータを参照してください。
CREATE VIEW および CREATE PROCEDURE を参照してください。
Advanced Operations Guide』の Master ユーザーを参照してください。
DROP VIEW および DROP PROCEDURE を参照してください。
REVOKE も参照してください。
Advanced Operations Guide』の PSQL セキュリティを参照してください。
信頼されないビューまたは信頼されないストアド プロシージャ
GRANT および REVOKE を参照してください。
Advanced Operations Guide』の PSQL セキュリティを参照してください。
このセクションでは、GRANT のいくつかの例を示します。
GRANT ALL ステートメントは、指定したユーザーまたはグループに INSERT、UPDATE、ALTER、SELECT、DELETE、および REFERENCES の権限を付与します。また、辞書の CREATE TABLE 権限も付与されます。次のステートメントによって、テーブル Class のユーザー dannyd に上記のすべての権限が付与されます。
GRANT ALL on Class to dannyd
============ 
次のステートメントによって、テーブル Class のユーザー debieq に ALTER 権限が付与されます。
GRANT ALTER on Class TO debieq
============ 
次のステートメントによって、テーブル Classkeithv および miked に INSERT 権限が付与されます。このテーブルは winsvr644AdminGrp というオーナー ネームを持ちます。
GRANT INSERT ON Class winsvr644AdminGrp TO keithv, miked
============ 
次のステートメントによって、テーブル Classkeithv および miked に INSERT 権限が付与されます。
GRANT INSERT ON Class TO keithv, miked
============ 
次のステートメントによって、ユーザー keithv および brendanbPerson テーブル内の 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 という名前のユーザーにログイン権限が与えられ、パスワードがそれぞれ password1234567 と指定されます。
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
============ 
Btrieve オーナー ネームを持つテーブルの権限を付与するには、Master ユーザーは GRANT ステートメントで正しいオーナー ネームを指定しなければなりません。
次の例では、Master ユーザーに Btrieve オーナー ネーム abcd を持つテーブル t1 の SELECT 権限が与えられます。
GRANT SELECT ON t1 'abcd' TO Master
Master ユーザーは、オーナー ネームを持たないテーブルのすべての権限を持ちます。テーブルのオーナー ネームは Maintenance ユーティリティを使って設定できます。Btrieve オーナー ネームは大小文字が区別されます。
============ 
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'
関連項目
CREATE GROUP
CREATE PROCEDURE
CREATE VIEW
DROP GROUP
REVOKE
SET OWNER
SET SECURITY
システム ストアド プロシージャ