いつでも初心

自分が初学時に困った技術ネタを中心に。

GRANT ~ WITH GRANT OPTIONの実験

【環境】
 ・Oracle Database 19c Enterprise Edition Release 19.0.0.0.0


GRANT文はユーザー(またはロール)に権限を付与することができますが、
WITH GRANT OPTIONを付け外しした際にどのような動きをするのか、
ちょっと試してみました。
なお基本説明は極力省きますので、記述が足りない部分は公式ドキュメントや
他の方のブログなどで確認してください。

ユーザー等の準備

ユーザー内容
datauserテーブルとデータを持ったユーザー
gruser_xcreate sessionのみ付与されたユーザー
gruser_ycreate sessionのみ付与されたユーザー

SQL> sho user
ユーザーは"SYS"です。
SQL> CREATE USER datauser IDENTIFIED BY tiger;

ユーザーが作成されました。

SQL> GRANT create session TO datauser;

権限付与が成功しました。

SQL> CREATE TABLE datauser.tbl0(no number(1));

表が作成されました。

SQL> ALTER USER datauser QUOTA 1m ON users;

ユーザーが変更されました。

SQL> INSERT ALL
  2    INTO datauser.tbl0(no) VALUES (1)
  3    INTO datauser.tbl0(no) VALUES (2)
  4    INTO datauser.tbl0(no) VALUES (3)
  5  SELECT * FROM dual;

3行が作成されました。

SQL> COMMIT;

コミットが完了しました。

SQL> CREATE USER gruser_x IDENTIFIED BY tiger;

ユーザーが作成されました。

SQL> CREATE USER gruser_y IDENTIFIED BY tiger;

ユーザーが作成されました。

SQL> GRANT create session TO gruser_x;

権限付与が成功しました。

SQL> GRANT create session TO gruser_y;

権限付与が成功しました。


オブジェクト権限の付与

オブジェクト権限は「select」、対象は「datauserのtbl0」とします。
WITH GRANT OPTION付きのGRANTを試してみましょう。

SQL> sho user
ユーザーは"SYS"です。
SQL> GRANT select ON datauser.tbl0 TO gruser_x WITH GRANT OPTION;

権限付与が成功しました。

gruser_xにselect権限が付与されたため、gruser_xは
datauserのtbl0を参照できます。
加えてWITH GRANT OPTION 付きであるため、gruser_xはgruser_yに対して
datauserのtbl0のselect権限を付与することができます。

SQL> CONN gruser_x/tiger@pdb1
接続されました。
SQL> SELECT * FROM datauser.tbl0;

        NO
----------
         1
         2
         3

SQL> GRANT select ON datauser.tbl0 TO gruser_y;

権限付与が成功しました。

SQL> CONN gruser_y/tiger@pdb1
接続されました。
SQL> SELECT * FROM datauser.tbl0;

        NO
----------
         1
         2
         3


ちなみにWITH GRANT OPTIONがないと、他ユーザーへ付与できません。

SQL> CONN gruser_x/tiger@pdb1
接続されました。
SQL> GRANT select ON datauser.tbl0 TO gruser_y;
GRANT select ON datauser.tbl0 TO gruser_y
                         *
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています

オブジェクト権限の剥奪

gruser_xは他ユーザーへ権限を付与できたわけですが、
もし付与権限を剥奪されたら、gruser_yに付与した権限はどうなるのでしょう?

SQL> sho user
ユーザーは"SYS"です。
SQL> REVOKE select ON datauser.tbl0 FROM gruser_x;

取消しが成功しました。
SQL> CONN gruser_y/tiger@pdb1
接続されました。
SQL> SELECT * FROM datauser.tbl0;
SELECT * FROM datauser.tbl0
                       *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。

gruser_xの権限が剥奪されたことにより、
gruser_yもtbl0が参照できなくなりました。


【関連記事】
tmts.hatenablog.jp

GRANT ~ WITH ADMIN OPTIONの実験

【環境】
 ・Oracle Database 19c Enterprise Edition Release 19.0.0.0.0


GRANT文はユーザー(またはロール)に権限を付与することができますが、
WITH ADMIN OPTIONを付け外しした際にどのような動きをするのか、
ちょっと試してみました。
なお基本説明は極力省きますので、記述が足りない部分は公式ドキュメントや
他の方のブログなどで確認してください。

ユーザーの準備

ユーザー内容
gruser_x何も権限を持っていないユーザー
gruser_y何も権限を持っていないユーザー

SQL> sho user
ユーザーは"SYS"です。
SQL> CREATE USER gruser_x IDENTIFIED BY tiger;

ユーザーが作成されました。

SQL> CREATE USER gruser_y IDENTIFIED BY tiger;

ユーザーが作成されました。

システム権限の付与

確認に使用するシステム権限は「create session」とします。
WITH ADMIN OPTION付きのGRANTを試してみましょう。

SQL> sho user
ユーザーは"SYS"です。
SQL> GRANT create session TO gruser_x WITH ADMIN OPTION;

権限付与が成功しました。

gruser_xにcreate session権限が付与されたため、gruser_xは
データベースに接続できます。
加えてWITH ADMIN OPTION 付きであるため、gruser_xはgruser_yに対して
create session権限を付与することができます。

SQL> CONN gruser_x/tiger@pdb1
接続されました。
SQL> GRANT create session TO gruser_y;

権限付与が成功しました。


ちなみにWITH ADMIN OPTIONがないと、他ユーザーへ付与できません。

SQL> CONN gruser_x/tiger@pdb1
接続されました。
SQL> GRANT create session TO gruser_y;
GRANT create session TO gruser_y
*
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています

システム権限の剥奪

gruser_xは他ユーザーへ権限を付与できたわけですが、
もし付与権限を剥奪されたら、gruser_yに付与した権限はどうなるのでしょう?

SQL> sho user
ユーザーは"SYS"です。
SQL> REVOKE create session FROM gruser_x;

取消しが成功しました。
SQL> conn gruser_y/tiger@pdb1
接続されました。

gruser_xの権限が剥奪されても、gruser_yには影響ないようです。


【関連記事】
tmts.hatenablog.jp

画面デザイン時のDBGridに抽出データを表示してみる

【環境】
 ・Delphi 10.2 Tokyo Professional
 ・PostgreSQL 10.0(64bit)
 ・psqlODBC 09.06.0500(32bit)
 ・Windows 7 Professional(64bit)
 ※FireDAC C/S Packはありません。


デザイン時の画面において
フォーム上に貼り付けたDBGridコントロールに、
PostgreSQLに対して投げたSQLの抽出内容を
設定でサクッと表示してみましょう。
過去関連記事は最下部をご覧ください。


フォームへの配置


f:id:tmts:20171008220751p:plain


■FDPhysPgDriverLink1:TFDPhysPgDriverLink

プロパティ設定値
VendorLiblibpq.dllのフルパスを指定

  今回はpsqlODBCのlibpq.dllパスを指定します。


■FDConnection1:TFDConnection
  ※接続エディタによる設定部分は割愛します。(過去記事参照)

プロパティ設定値
ConnectedTrue


■FDQuery1:TFDQuery

プロパティ設定値
ActiveTrue
ConnectionFDConnection1
SQLSQL文を指定

  SQLはselect * from deptと設定してみました。


■DataSource1:TDataSource

プロパティ設定値
DataSetFDQuery1


■DBGrid1:TDBGrid

プロパティ設定値
DataSourceDataSource1



全て設定した時点で
グリッドに抽出結果が表示されます。

f:id:tmts:20171008221508p:plain





【関連記事】
tmts.hatenablog.jp
tmts.hatenablog.jp

FireDAC 接続エディタでPostgreSQL 10.0への接続確認

【環境】
 ・Delphi 10.2 Tokyo Professional
 ・PostgreSQL 10.0(64bit)
 ・psqlODBC 09.06.0500(32bit)
 ・Windows 7 Professional(64bit)
 ※FireDAC C/S Packはありません。


FireDACの接続エディタで、PostgreSQLへの接続を簡単に確認したいと思います。
データベースおよびpsqlODBCはローカルマシンにインストールしておきます。


フォームの準備


f:id:tmts:20171007012603p:plain

フォームに以下を貼り付けます。
・TFDConnection(FireDAC 内)
・TFDPhysPgDriverLink(FireDACLinks 内)


TFDPhysPgDriverLinkのプロパティの設定


f:id:tmts:20171007012528p:plain

psqlODBCのインストール先を今回は「D:\PostgreSQL\odbc_09_06_500_32bit」としているので、
その2階層下の「libpq.dll」を指定します。
※32bit版を使用しています


TFDConnectionの接続エディタでの設定


f:id:tmts:20171006230637p:plain

・ドライバID:PG
・Database:oradb(各々のPostgreSQLにおける接続したいデータベース名)
・User_Name:scott(各々のデータベースのログインユーザー名)
・Password:tiger(各々のデータベースのログインパスワード)
・Server:127.0.0.1(Pro版なので、ローカルの設定としています)


テスト


f:id:tmts:20171006233350p:plain

「テスト」ボタンを押下後、必要事項を入力して「OK」を押下します。


f:id:tmts:20171006232132p:plain

接続が成功したら、一安心です。


SQL スクリプトでの確認


f:id:tmts:20171006232414p:plain

PostgreSQLに対しSQLを投げ、結果が返ってくることも
確認できました。

psqlODBC(PostgreSQL ODBC driver)32bit版をインストールする

【環境】
 ・PostgreSQL 10.0(64bit)
 ・Windows 7 Professional(64bit)


psqlODBCはPostgreSQL用のODBCドライバです。
環境の都合により、32bit版をインストールしてみます。


ダウンロード


まずはODBCドライバの提供サイトへ行きます。

psqlodbc - PostgreSQL ODBC driver


Downloadタブを押下します。

f:id:tmts:20171007000603p:plain


msiを押下します。

f:id:tmts:20171007001241p:plain


前述どおり、今回は32bit版をダウンロードします。

f:id:tmts:20171007002414p:plain

2017/10/6時点では「psqlodbc_09_06_0500-x86.zip」が最新でした。
10.0版はまだでしたね。


インストール


1.ダウンロードしたファイルを解凍後、
  psqlodbc_x86.msiを実行してインストールを開始します。

f:id:tmts:20171007003605p:plain


2.以降、基本的にNextで進めていけばOKです。

f:id:tmts:20171007004614p:plain


3.License Agreementはちゃんと読みましょう。

f:id:tmts:20171007004622p:plain


4.今回はインストール先をデフォルトから変更しています。

f:id:tmts:20171007004632p:plain


5.Installを押下します。

f:id:tmts:20171007004637p:plain


6.もし途中でWindowsの変更許可の警告などが出る場合は
  許可をしてください。

f:id:tmts:20171007004253p:plain


7.完了です。

f:id:tmts:20171007004643p:plain