• 締切済み

同一SQLでも実行ユーザによりカラム表示をマスクしたい

現在はアクセス制限していないAccessからのODBC接続による処理が多数あるのですが、セキュリティの観点から同一SQLを実行した場合でもユーザにより表示される項目を抑制したいと思っています。 重要情報のカラムは、管理者はデータ値で見えるけど、一般ユーザは「表示不可」とかにしたいです。(具体的には下記イメージ) これを実現する上で、既存のAccessに手を加えることなく実現できる方法は無いかを探しています。 テーブル:TBL01(所有者:u01)に、「氏名」と「口座番号」のカラムがあるとし、 Select * from TBL01;を実行した場合、 <管理者>        <一般ユーザ> 氏名 口座番号      氏名 口座番号 -- ----      -- ---- A氏 12345678      A氏 表示不可 B氏 99999999      B氏 表示不可 となるようにしたい 所有者u02,u03で夫々以下の様なViewを作り、実行ユーザにViewのSelect権限を与えれば出来るかと考えました。 u02で: create view u02.TBL01 (氏名,口座番号) as select * from u01.TBL01; u03で: create view u03.TBL01 (氏名,口座番号) as select 氏名,'表示不可' from u01.TBL01; Viewのselect権限付与: 管理者(u04)と一般ユーザ(u05)に対して grant select on u02.TBL01 to u04; grant select on u03.TBL01 to u05; とすれば、上手くいくのではないかと考えていました。 しかしAccessからのODBC接続の場合、'所有者'.'オブジェクト'(例にそうとu01.TBL01)という形でSQLが格納される様なので、上記の方法では実現できません。 違った視点から、カラムの暗号化が使えないか?とか、一般ユーザのselect権限にカラム指定をしてアクセス不可のカラムを外すとかも考えましたが、出来そうもありませんでした。 面倒な質問で申し訳ございませんが、良い案をご教授いただければ助かります。

  • Oracle
  • 回答数1
  • ありがとう数1

みんなの回答

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.1

Oracle10gなら、VPD(仮想プライベートデータベース)で実現できそうな 気がします。詳しくはマニュアルを参照下さい。

goma314
質問者

お礼

ありがとうございます。 現在のVersionは9iですが、Version Upの予定もありますのでVPDを調べて見ます。

関連するQ&A

  • SQL サブクエリで抽出したカラムについて

    サブクエリで抽出したカラムを 本クエリでの結果と一緒に表示したいのですが どのように実現してよいかわからず困っております。 詳細としては、下記のようなことをしたいと考えております。 文中の1)と2)は文章下部にあるSQLを指しております ----------------------------------------------------------- 最初は、1)のように凄く単純なSQLでよかったのですが 仕様が変わり、TBL2で取得した新しいカラムも一緒に 本クエリでの結果として取得できれば、SQLを2回実行せずに済むなと考えたのですが、 2)のように色々と試行錯誤したのですが、実現できません。 (2)は単なる空想ですが…) そこで、わかる方にお伺いしたいのですが、 副問い合わせで取得した複数カラムの中の1つのカラム【2)でいうところのTBL2.X】 を 2)のように"select TBL1.A , TBL2.X"として、結果を得ることは可能でしょうか。 ただし、 TBL1のカラムAは、TBL2に存在しない TBL2のカラムXは、TBL1には存在しない カラムBは、TBL1、TBL2に存在する の条件となっております 環境はMysqlです テーブル結合の方法も考えたのですが、 TBL2で、日付でソートし、その上位100件だけを 持ってきたいと思ったので、副問い合わせで一気に抽出しようとこの方法を考えまし た お分かりになる方がいらっしゃいましたらよろしくお願いします 1)SQL ------------ select TBL1.A from TBL1 where TBL1.B in ( select TBL2.B from TBL2 where 条件 ) 2)想像SQL(こんな感じの事をしたい) -------------- select TBL1.A , TBL2.X from TBL1 where TBL1.B in ( select TBL2.B , TBL2.X from TBL2 where 条件 order by TBL2.日付 desc limit 100 )

    • ベストアンサー
    • MySQL
  • Accessのクエリで複数カラムの最大値表示

    Accessのクエリで複数カラムの中から最大のカラムデータを表示させる方法をお教えください。 テーブル名:TBL カラムA,B,Cがあっていずれも整数です。 カラムA,B,Cの最大のデータを表示したいのです。 データの例 A B C 10 14 12 → 14 21 18 19 → 21 15 11 17 → 17 このときSQL文でいえば次のようにすればできるのでしょうが、IF関数2回使わないで一発で最大値を表示させられないでしょうか。 Select iif(A>=B,A,B) as D, iif(D>=C,D,C) as E from TBL; Select Max(A,B,C) as D from TBL; のようなのがないでしょうか?

  • PostgreSQLのカラムに"user"という名前のカラムがある場合のデータ表示について

    PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。 ユーザー名を管理するテーブルを以下のように作成しました。 テーブル:table  |No|user|from |  |1 |Atom|tokyo|  |2 |Boss|izu |  |3 |Cat |chiba| このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。  SELECT user FROM table 上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。 試しに  SELECT * FROM table で実行するとテーブルのデータを取得でき、  SELECT table.user FROM table で実行するとsyntax errorとエラー表示されデータが結果が表示されません。 userをセッション情報としてではなく、テーブル(table)のデータとして取得したい場合はどのようにしたらいいのでしょうか? よろしくお願いします。

  • VIEWしか読み取れないユーザの作成方法について

    SQL Server 2008R2/2012でのVIEWのアクセス権限の付与について パケージのシステムを構築しており、ユーザにVIEWの読み取り権限だけを公開したいと考えています。 ユーザは、SQL Server Management StudioでそのVIEWに対してSELECTだけできるようにしたいのですが、やってみるとVIEWに対しての権限の他に元となるテーブルのアクセス権限も必要となり、見せたくないテーブルとそのテーブルの列が見えてしまいます。 なんとか、DBへの特定のログインユーザだけVIEWに対して読み取り(SELECT)ができようなユーザが作れないでしょうか? アドバイスをお願いします。

  • SQLの表示を整える

    SQLの表示を見やすくしたく色々調べているのですが、 下記の【以下のような表示にしたい!】のような 表示にするにはどうすればよいでしょうか? 【何もsetしない場合】 SQL> desc TBL 名前 NULL? 型 --------- -------- ---------------------------- ID NOT NULL VARCHAR2(32) TYPE NOT NULL VARCHAR2(2) CORP NOT NULL VARCHAR2(32) CRT NOT NULL DATE SQL> select ID,TYPE,CORP,CRT from TBL; ID -------------------------------------------------------------------------------- TYPE ------ CORP -------------------------------------------------------------------------------- CRT -------- admin U 99 05-08-22 ID -------------------------------------------------------------------------------- TYPE ------ CORP -------------------------------------------------------------------------------- CRT -------- * G 99 05-08-22 【setした場合】 SQL> set linesize 10 SQL> set pagesize 50 SQL> select ID,TYPE,CORP,CRT from TBL; ID ---------- TYPE ------ CORP ---------- CRT -------- admin U 99 05-08-22 * G 99 05-08-22 【以下のような表示にしたい!】 (要は、ID,TYPE,CORP,CRPの各列の下(真下)に値を表示したい) ID________TYPE__CORP______CRT ---------------------------------- admin_____U_____99________05-08-22 *___________G_____99________05-08-22 #<余談> #上記'_'は空白です。 #複数の空白を記入しても1文字分しか表示されないため、このようなことをしています。(これも上手く表示できてませんが) #教えて!gooで”複数の空白を連続して表示する”場合、 #どのように記入すればよいでしょうか? よろしくお願いします。

  • 【Access】テーブルの参照について

    Accessでツール作成をしたいのですが当SWの使用経験が浅く使い方が分からず困っています。 AccessにはOracleでいうviewのような機能はAccessには存在するのでしょうか。 リンクテーブルという機能があるのは知っていますが、リンク元・先でデータベースが別でなければならないと理解しています。 私がやりたいことは、同じデータベース内に存在するテーブルを複数参照し、「一つのテーブルに見せる」といった動作です。 以下、参考に記載します。(やりたいこと) (1)TBL1(input):カラム1,カラム2 (2)TBL2(input):カラム3,カラム4,カラム5 (3)TBL3(TBL1+TBL2):TBL1.カラム1,TBL1.カラム2,TBL2.カラム5 →TBL3をOracleでいうviewの形で持ちたい 良い方法があればご教示ください。

  • 参照権限の付与方法

    環境は、Windows Server 2003、Oracle 9.2.0.6.0 になります。 userAが持っている表、ビューの参照権限を userBに与えようと思います。 userAでログインし、以下のSQLを発行したところ、  grant select any table to userB; 以下のエラーが出ました。  ORA-01031:権限が不足しています。 これは、userAに権限を付与する権限がないのだと 理解しました。 ■疑問1 この現象は、userAに権限を付与する権限がない との理解で正しいでしょうか? また、userAに「権限を付与する権限」を付与するには どのようなSQLを発行すればよいでしょうか? ■疑問2 systemユーザでログインし、userBに権限を与える方法も あると思います。 その場合、以下のSQL文になると思います。  grant select on userA.testtable to userB この場合、表、ビュー1つずつ与える必要がありますが、  grant select any table to userB; のように、全ての表、ビューを参照権限を与えることはできるでしょうか?

  • Access(Jet4.0)SQLでGRANTが使用できない

    AccessでGrantを使った以下のようなSQLクエリを実行し、 特定のユーザに読み取り権限の付与・削除を 行おうとしているのですが、正常に実行されません。    grant select on [DbName] to [UserName] エラーの内容としては 『SQLステートメントが正しくありません。 'Delete'、'Insert'、'プロシージャー'、'Select'または 'update'を使用してください』 とのメッセージが表示されます。 管理者権限でログインしてユーザー権限のユーザを 指定して処理を行っています。 構文も間違っていないと思うので、原因がつかめず困惑しています。 心当たり、間違い等、可能性レベルでも結構ですので ご教授・ご指摘いただけますようお願いいたします。

  • FILE権限があるはずなのにSQLファイルを実行出来ない

    MySQL 3.23.58(Linux)です。 testというデータベースを作成し、ユーザtestuserにこのtestデータベースへのFILE権限やUPDATE権限など一通り持たせています。 ユーザ「testuser」でMySQLにログインし、use test;とすると、Database Changedと出てデータベースの編集が可能になるのですが、 mysql -u testuser -p ***** test < backup.sql この様にbackup.sqlというSQLファイルを実行しようとすると、ERROR 1044のアクセス権限がありませんエラーが表示されてしまいます。 SQLファイルをtestデータベースに反映させるにはどうすればいいでしょうか?

  • Accessクエリ

    Accessのクエリでお教えください。 次のようなテーブルデータがあったとき 会員tbl 都道府県、区分、氏名 東京    1   山田 東京    1   田中 東京    2   佐藤 大阪    1   伊藤 福岡    2   鈴木 都道府県別区分別の件数を出したいのですがどのようなクエリにしたらできるのでしょうか。 都道府県、区分、件数 東京    1   2 東京    2   1 大阪    1   1 大阪    2   0 福岡    1   0 福岡    2   1 SELECT 会員tbl.都道府県, 会員tbl.区分, Count(会員tbl.氏名) AS 氏名のカウント FROM 会員tbl GROUP BY 会員tbl.都道府県, 会員tbl.区分; デザインビューで設定したものをSQLビューで表示したものです。 これですと次のようになってしまいます。 都道府県、区分、件数 東京    1   2 東京    2   1 大阪    1   1 福岡    2   1 0件も表示したいのです。