- ベストアンサー
ユーザーへのディレクトリ権限付与について
WindowsXPのOracle9i環境にて、 まず、以下のようにしてユーザ「username」を作成しました。 create user username identified by Password default tablespace tab_space temporary tablespacetemp; grant dba,resource,connect to username; 次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp'; ディレクトリを作成しました。 そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。 grant READ,WRITE ON directory dir to username; また、grant READ,WRITE ON directory dir to public; とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。 何か間違っておりますでしょうか? それとも何か手順で足らないものがあるのでしょうか? ご教示いただければと思います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
dba_usersに出てこない以上、そのユーザはデータベース上には存在しないかと思います。 そのパッケージソフトが、どのような構成をしているのかわかりませんが、パッケージ上のユーザとデータベースのユーザが別なのではないでしょうか。 パッケージ上のAというユーザが、データベース上のXというユーザにログインして動作するというのは、よくあるパターンです。 パッケージのサポートに確認するのが良いかと思います。
その他の回答 (3)
- 3rd_001
- ベストアンサー率66% (115/174)
提示した手順を行なってもユーザーが作成できないということでしょうか。 その場合、障害としか思えません。 ではなくて、当初作成したというユーザが存在しないという場合、作業間違いでユーザが作成できていないと思われます。 dba_usersに表示されない以上、そうとしか思えません。 再度、提示した手順を行い、その内容を提示してください。 でなければ、どの点がわるいのか切り分けできません。
お礼
本当に一から、つまり表領域からユーザから作成した場合はうまくユーザ作成できておりました。 今回の件ですが、説明不足で大変申し訳ありませんでしたが、あるパッケージにて自動作成されたユーザになります。ログから推測するに通常のユーザ作成かと思っておりましたが、ひょっとすると特殊な作成をされているのかもわかりません。 逆に、当然ながらDBには普通にログインできるユーザに対してそのようにSYSユーザからは見えないようなユーザにすることができるものなのでしょうか? 結局はそのユーザにディレクトリ権限を与えたいだけなのですが・・・。 申し訳ありません。ご教示いただければと思うのですが。。
- ossan_hiro
- ベストアンサー率66% (88/132)
9iでやってみましたが、問題なく動きます。 (パッチも当ててないです) >次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp'; >ディレクトリを作成しました。 ここでディレクトリの名前が「FILE_PATH」ですが、 >grant READ,WRITE ON directory dir to username; 上のSQLでは「dir」になってます。 この辺が原因では? p.s. ファイル出力は、3rd_001さんのを使用させていただきました。 ----------------------------------------------- 以下はログ C:\>sqlplus "sys/sysman as sysdba" SQL*Plus: Release 9.2.0.1.0 - Production on 日 Dec 21 17:05:26 2008 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production に接続されました。 SQL> create user username identified by hoge default tablespace users temporary tablespace temp; ユーザーが作成されました。 SQL> grant dba,resource,connect to username; 権限付与が成功しました。 SQL> CREATE DIRECTORY FILE_PATH as 'c:\temp'; ディレクトリが作成されました。 SQL> grant READ,WRITE ON directory FILE_PATH to username; 権限付与が成功しました。 SQL> connect username/hoge 接続されました。 SQL> declare 2 fh utl_file.file_type; 3 begin 4 fh := utl_file.fopen( 'FILE_PATH','hoge.txt','a',32767); 5 utl_file.put_line(fh, 'hoge'); 6 utl_file.fclose(fh); 7 end; 8 / PL/SQLプロシージャが正常に完了しました。 SQL> host dir c:\temp c:\temp のディレクトリ 2008/12/21 17:10 6 hoge.txt SQL> host type c:\temp\hoge.txt hoge SQL>
- 3rd_001
- ベストアンサー率66% (115/174)
当方、11gですが記載されている手順をそのまま実行したところ 全く問題なく出来ております。 以下が実際のSQLと結果です。 そちらの環境で、以下を実行しても駄目でしょうか? Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options に接続されました。 SQL> create user test01 identified by test01 default tablespace users temporary tablespace temp; ユーザーが作成されました。 SQL> grant dba,resource,connect to test01; 権限付与が成功しました。 SQL> CREATE DIRECTORY FILE_PATH as 'c:\temp'; ディレクトリが作成されました。 SQL> grant READ,WRITE ON directory FILE_PATH to test01; 権限付与が成功しました。 SQL> declare fh utl_file.file_type; begin fh := utl_file.fopen( 'FILE_PATH','hoge.txt','a',32767); utl_file.put_line(fh, 'hoge'); utl_file.fclose(fh); end; / PL/SQLプロシージャが正常に完了しました。 SQL> exit Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing optionsとの接続が切断されました。 more c:\temp\hoge hoge
お礼
ご回答ありがとうございます。 作成したユーザーがSYSユーザーから見えていないようで権限付与ができません。 select username from dba_usersで確認した中に見当たりません。なので権限付与ができないのです。「ora-01917ユーザー又はロールは存在しません。」が発生します。
お礼
おっしゃるとおりですね。どうも色々とありがとうございました!