GRANT ~ WITH GRANT OPTIONの実験
【環境】
・Oracle Database 19c Enterprise Edition Release 19.0.0.0.0
GRANT文はユーザー(またはロール)に権限を付与することができますが、
WITH GRANT OPTIONを付け外しした際にどのような動きをするのか、
ちょっと試してみました。
なお基本説明は極力省きますので、記述が足りない部分は公式ドキュメントや
他の方のブログなどで確認してください。
ユーザー等の準備
ユーザー | 内容 |
---|---|
datauser | テーブルとデータを持ったユーザー |
gruser_x | create sessionのみ付与されたユーザー |
gruser_y | create 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の抽出内容を
設定でサクッと表示してみましょう。
過去関連記事は最下部をご覧ください。
フォームへの配置
■FDPhysPgDriverLink1:TFDPhysPgDriverLink
プロパティ | 設定値 |
---|---|
VendorLib | libpq.dllのフルパスを指定 |
今回はpsqlODBCのlibpq.dllパスを指定します。
■FDConnection1:TFDConnection
※接続エディタによる設定部分は割愛します。(過去記事参照)
プロパティ | 設定値 |
---|---|
Connected | True |
■FDQuery1:TFDQuery
プロパティ | 設定値 |
---|---|
Active | True |
Connection | FDConnection1 |
SQL | SQL文を指定 |
SQLはselect * from deptと設定してみました。
■DataSource1:TDataSource
プロパティ | 設定値 |
---|---|
DataSet | FDQuery1 |
■DBGrid1:TDBGrid
プロパティ | 設定値 |
---|---|
DataSource | DataSource1 |
全て設定した時点で
グリッドに抽出結果が表示されます。
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はローカルマシンにインストールしておきます。
フォームの準備
フォームに以下を貼り付けます。
・TFDConnection(FireDAC 内)
・TFDPhysPgDriverLink(FireDACLinks 内)
TFDPhysPgDriverLinkのプロパティの設定
psqlODBCのインストール先を今回は「D:\PostgreSQL\odbc_09_06_500_32bit」としているので、
その2階層下の「libpq.dll」を指定します。
※32bit版を使用しています
TFDConnectionの接続エディタでの設定
・ドライバID:PG
・Database:oradb(各々のPostgreSQLにおける接続したいデータベース名)
・User_Name:scott(各々のデータベースのログインユーザー名)
・Password:tiger(各々のデータベースのログインパスワード)
・Server:127.0.0.1(Pro版なので、ローカルの設定としています)
テスト
「テスト」ボタンを押下後、必要事項を入力して「OK」を押下します。
接続が成功したら、一安心です。
SQL スクリプトでの確認
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タブを押下します。
msiを押下します。
前述どおり、今回は32bit版をダウンロードします。
2017/10/6時点では「psqlodbc_09_06_0500-x86.zip」が最新でした。
10.0版はまだでしたね。
インストール
1.ダウンロードしたファイルを解凍後、
psqlodbc_x86.msiを実行してインストールを開始します。
2.以降、基本的にNextで進めていけばOKです。
3.License Agreementはちゃんと読みましょう。
4.今回はインストール先をデフォルトから変更しています。
5.Installを押下します。
6.もし途中でWindowsの変更許可の警告などが出る場合は
許可をしてください。
7.完了です。